git - 为什么 Git 创建一个没有文件更改的 merge 提交?

标签 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 时出现问题。我想做的就是让 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/

相关文章:

git - Azure Devops Pipeline 运行会导致 Git 错误?

python - 如何使用python子进程从master获取最新的提交id(git repo)

git - 如何在 git index 中取消暂存重命名的文件?

git - 正确 merge git 中的文件

git - merge 后继续git分支是否常见?

Git:提交消息以将master merge 到分支

git - 如何在保持子分支完整的情况下 merge 父分支

asp.net-mvc - 本地 IIS Web 服务器的 Git 推送式部署

git - 来自一个 pull 请求的提交显示在第二个 pull 请求中

git - 在分支之间复制单个提交,保留 SHA-1 标签