我正与某人合作完成一个项目,因此我们决定使用 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
时出现问题。我想做的就是让 his 提交到我的本地存储库中,但我最终得到了一个 merge 提交,上面写着类似 Merge remote-tracking branch 'origin/master'
作为它的信息。
我不想进行这种毫无意义的提交,因为我们的提交中没有冲突代码。我们正在处理完全不同的文件,因此没有理由进行此提交。我怎样才能阻止 git 创建这个 merge 提交?
最佳答案
您可以通过使用 rebase 而不是 merge 来省略创建 merge 提交。
正如@Dougal 所说,如果您执行 git fetch
,您可以在之后执行 git rebase
以将更改的基础更改为获取的 HEAD
.
通常您通过从远程存储库中 pull 来创建那些不需要的 merge 提交。
在这种情况下,您可以添加 --rebase
选项:
git pull --rebase
或将正确的选项添加到 Git 配置文件(本地):
git config branch.<branch-name-here>.rebase true
或对于所有新的存储库和分支:
git config branch.autosetuprebase always --global
但是, rebase 创建更清晰、更线性的历史创建 merge 提交是很好的,在两个分支中都有大量更改(使用 git merge
这样做) .
关于git - 为什么 Git 创建一个没有文件更改的 merge 提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10157702/