Git总是执行非快进合并,除了在拉取时?

10

是否有一种方法使git始终执行无快进合并,但在拉取时除外?

遵循良好的git工作流程,我喜欢保留我的分支历史记录(以后更容易删除功能等),因此我已将我的配置设置为在合并时永不快进,例如:

git config --global merge.ff false

然而,每当我更新当前分支/从远程仓库拉取代码时,它都会创建一个合并提交...这真的很糟糕,特别是在 fork 其他在 GitHub 上托管的项目时。

有没有办法使 git pull 总是使用快进方式?不幸的是,我尝试了以下方法:

git pull --ff-only upstream master

......结果却看到它吐出一个错误:

fatal: You cannot combine --no-ff with --ff-only.

我真的很厌烦看到这个:

恶心:“git pull” 合并提交


当您通过 git config merge.ff true 在本地存储库中覆盖全局设置时会发生什么? - mavam
1
  1. 我不想改变我的其他合并(非拉取请求)的行为。
  2. 我不想为每个我创建/工作的存储库更改这个。
- Rican7
2个回答

10

你可以尝试这个:

git pull --rebase upstream master

这将在上游提交的基础上重新设置你的提交记录。

以下是它的示意图。

你的本地代码库:

* bbbbbbb (HEAD, master) My changes.
* aaaaaaa Initial commit.

上游代码库:

* ccccccc (upstream/master) Their changes.
* aaaaaaa Initial commit.

执行 git pull --rebase upstream master 命令后:

* bbbbbbb (HEAD, master) My changes.
* ccccccc (upstream/master) Their changes.
* aaaaaaa Initial commit.

该死。我担心我不能使用我的当前流程。谢谢你,但是不断地重新定位感觉很不舒服。 - Rican7
1
@Rican7,这需要你稍微小心一点,但是你会得到一个更清晰的树。在成为“--no-ff”用户之后,我已经采用了它... - mgarciaisaia

1
我建议您在单独的分支上工作,并保持不断地基于远程分支进行变基,而不是合并。
更改:
$ git checkout -b my-topic-branch
$ (work work work)
$ git commit
$ git checkout master
$ git pull origin master
$ git merge my-topic-branch

作者:

$ git checkout -b my-topic-branch
$ (work work work)
$ git commit
$ git fetch origin
$ git rebase origin/master
$ git checkout master
$ git merge my-topic-branch

如果那些配置的组合不起作用,我想你只能接受这个事实了。

谢谢。我本来想避免修改,但是感谢你的帮助。 :-) - Rican7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接