30

我正在与某人合作开展一个项目,因此我们决定使用 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 fetchgit merge。我要做的就是将他的提交提交到我的本地存储库中,但我最终得到了一个合并提交,说的是Merge remote-tracking branch 'origin/master'它的消息。

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

4

2 回答 2

31

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

正如@Dougal 所说,如果您这样做git fetch,您可以在git rebase之后执行以将更改的基础更改为 fetched HEAD

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

git pull --rebase

或将正确的选项添加到 Git 配置文件(本地):

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

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

git config branch.autosetuprebase always --global

然而,变基创建更清晰、更线性的历史,最好创建合并提交,其中两个分支都有大量更改(用于git merge这样做)。

于 2012-04-14T22:11:25.257 回答
9

使用git rebase(在 a 之后git fetch)使您的提交适用于他的而不是以前的主人。也就是说,ABCGHIDEF在你的例子中。(你不能ABCDEFGHI不做 a push -f,因为ABCGHI它已经在origin/master并且你必须覆盖它。)

于 2012-04-14T22:00:43.913 回答