为什么Git创建一个没有文件更改的合并提交?

时间:2012-04-14 21:58:50

标签: git git-merge

我正在与某人合作开展一个项目,所以我们决定使用git。不幸的是,我们经常在没有互联网的地方编码,所以我们最终得到类似的东西:

origin/master: A---B---C
                        \
mylocalmaster:           D---E---F
                        \
hismaster:               G---H---I

现在,说他推动他的提交并得到这个:

origin/master: A---B---C---G---H---I
                        \
master (local):          D---E---F

我想做的就是推动我的提交,以便在我的本地回购和在线回购中获得:

A---B---C---D---E---F---G---H---I

当我执行git push时似乎有效,但当我执行git fetch然后git merge时会出现问题。我所要做的就是将他的提交到我的本地仓库中,但我最终得到一个合并提交,说明Merge remote-tracking branch 'origin/master'之类的消息。

我不想进行这种无意义的提交,因为在我们的提交中没有冲突的代码。我们正在处理完全不同的文件,因此没有理由进行此提交。如何防止git创建此合并提交?

2 个答案:

答案 0 :(得分:31)

您可以使用 rebase 而不是 merge 来省略创建合并提交

正如@Dougal所说,如果你做git fetch,之后可以执行git rebase将更改的基础更改为提取的HEAD

通常通过从远程存储库中提取来创建那些不需要的合并提交。 在这种情况下,您可以添加--rebase选项:

git pull --rebase

或向Git配置文件(本地)添加适当的选项:

git config branch.<branch-name-here>.rebase true

或所有新的存储库和分支:

git config branch.autosetuprebase always --global

但是,变基会创建更清晰,更线性的历史记录最好创建合并提交,其中两个分支都有大量更改(使用git merge来执行此操作)。

答案 1 :(得分:9)

使用git rebase(在git fetch之后)使您的提交适用于他而不是之前的主人。也就是说,转到示例中的ABCGHIDEF。 (由于ABCDEFGHI已经在push -f并且你必须覆盖它,所以ABCGHI无法执行origin/master