我可以默认在git中关闭快进吗?

Jas*_*ker 257 git merge branch rebase fast-forward

我真的不能没有想过的时候,我会用git merge,而不是git rebase希望有一个承诺现身.有没有办法配置git默认快速关闭?事实上,有一个--ff选项似乎意味着有一种方法,但我似乎无法在文档中找到它.

Eri*_*ton 332

似乎线程中还有一个悬而未决的问题:如何全局(即所有分支)?对于记录,我们可以使用以下内容:

git config --add merge.ff false
Run Code Online (Sandbox Code Playgroud)

...使其适用于当前存储库中的所有分支.为了使适用于所有部门所有存储库,其中有人无运行--global选项(本地设置覆盖全局)运行以下命令:

git config --global --add merge.ff false
Run Code Online (Sandbox Code Playgroud)

文档:

merge.ff
默认情况下,当合并作为当前提交的后代的提交时,git不会创建额外的合并提交.相反,当前分支的提示是快进的.当设置为false时,此变量告诉git在这种情况下创建额外的合并提交(相当于--no-ff从命令行提供选项).设置为only时,仅允许此类快进合并(相当于--ff-only从命令行提供选项).

  • 我正在使用别名`puff ="pull --ff --ff-only"` (21认同)
  • 注意:`merge.ff`是在Git 1.7.6中引入的.它在旧版本中无效. (17认同)
  • Theres(现在,请参阅http://git-scm.com/docs/git-config)选项_pull.ff_可以设置为_only_,这将与别名相同. (11认同)
  • 对于使用Git 1.7.6的人来说,这是最好和最简单的解决方案. (2认同)

con*_*nny 273

是的,有--no-ff.您可以为每个分支配置合并选项,例如

git config branch.master.mergeoptions  "--no-ff"
Run Code Online (Sandbox Code Playgroud)

将以下内容添加到您的$(REPO)/.git/config文件中:

[branch "master"]
    mergeoptions = --no-ff
Run Code Online (Sandbox Code Playgroud)

脚注:谈到我的经验,我最终发现快速切换到关闭对git新手大多有帮助 - 但是一旦工作流和概念的感觉开始沉沦你绝对想要避免模糊你的日志图与大量毫无意义的'合并remote ..blarf'类型提交.

  • 学习git有点像爬山; 但是,git不是从小悬崖开始,而是向更强硬的悬崖开始,而是让你一次又一次地攀登同一座山峰,每次都落在不同的高度,每次都像生命线没有附着一样惊讶. (138认同)
  • 小心龙.正如@Thomas所说,这个选项很危险...每个git pull都会创建合并提交.git pull --ff不会覆盖git config中的mergeoptions = no-ff. (33认同)
  • 如果我只是厌倦了输入`git merge --no-ff(branchname)`怎么办?而且我希望`git pull`能够像往常一样发挥作用? (12认同)
  • @Thomas:是的; `git pull`是`git fetch` +`git merge`. (11认同)
  • 这看起来不错,但有没有办法在全球范围内为所有分支机构执行此操作,而不必为每个分支设置它? (8认同)
  • 这会影响"git pull"及其合并策略吗? (5认同)
  • 关于脚注 - 而不是1"无意义""合并分支小提琴"提交 - 我们将整个"小提琴"系列提交合并到我们的主人身上.通常包括六个合并提交.如果你有合并提交,你可以忽略详细的功能提交,并获得大概述,如下所示:$ git log --first-parent --pretty = oneline'feature-1'"c605cca334c722a34e3aea88c36a043ab3cca741合并分支'功能-2 'f93a46a24bd0761da0a1bd64b2da0549980979c8合并分支'feature-1'163602263b4f0a8463c6de82d3a7dd7b4c04ebca项目启动 (5认同)
  • @DaliborFilus驯服龙:`git config branch.autosetuprebase always`这样即使使用`branch.master.mergeoptions"--no-ff",它也可以在拉动时快速进入主分支. (2认同)

bas*_*ian 11

阅读答案的主题我最终使用以下两个选项

git config --global pull.ff only # Disallows non ff merges on pull. Overrides merge.ff when pulling
git config --global merge.ff false # even create extra merge commit when fast forward merge would be possible
Run Code Online (Sandbox Code Playgroud)

只是松散相关我也发现这个设置避免了拉动过程中的麻烦

git config --global pull.rebase # set up pull to rebase instead of merge
Run Code Online (Sandbox Code Playgroud)

  • 是的!排名最高的答案忽略了这一点。另外,Git Common Flow(可以说是事实上的标准)说:“建议使用 `git merge --no-ff` 来合并所有分支”,但是当你拉取时,合并已经发生了,所以这似乎2021 年的最佳答案——至少对我来说是这样。 (2认同)