我正在与某人合作开展一个项目,所以我们决定使用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创建此合并提交?
答案 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
。