如何解决与 2 个远程仓库的 git merge/rebase 冲突?

Posted

技术标签:

【中文标题】如何解决与 2 个远程仓库的 git merge/rebase 冲突?【英文标题】:How to resolve git merge/rebase conflicts with 2 remote repos? 【发布时间】:2012-10-05 00:37:54 【问题描述】:

遇到 git rebase 冲突问题,但仅在使用 2 个远程存储库时。这是工作流程:

    干活... 提交 pull -r staging master

这很好用。如果有冲突我可以解决。

然后在使用生产远程存储库时会出现问题。我是唯一一个推动生产的人。

    git pull -r production(由于某种原因需要在推送到生产之前执行此操作...不知道为什么,因为它应该是快进。) git 推送生产 git pull -r staging(更新我的仓库)

这里是我没有处理过的文件的各种合并冲突的地方。

冲突可能如下所示:

<<<<<<< HEAD
  here's some code...
=======
  more code...
>>>>>>> commit foo

所以,这里有问题:

    当我是唯一一个推动生产的人时,为什么我需要退出生产? 为什么已经提交但我没有更改的代码会出现合并冲突? 我会选择哪个提交? HEAD 或提交 foo 有什么更好的流程可以避免这种情况发生?

【问题讨论】:

我认为需要pull --rebase 的原因是您正在更改已推送的 staging 历史记录。 (例如,通过mergerebase)。记住那些改变了你提交的校验和,然后 git 就不能快进了。 【参考方案1】:

这是您的pull --rebase 为两个单独的远程存储库所做的直接副作用:您将现有的本地提交重新定位在您刚刚获取的远程 HEAD 之上,确保创建一个新的 HEAD SHA1,它不会存在于您的第二个远程仓库中(例如prod

当在同一个远程仓库的同一个分支上进行协作时,您可以将pull --rebase 用于您从未在任何地方推送过的提交,详见“When should I use git pull --rebase?”。

但是当你有 2 个 remotes repos 时,你应该在第一次推送后避免它,如“When will git pull --rebase get me in to trouble?”所示。

有关该主题的更多详细信息,请访问“What git branching models actually work?”。

【讨论】:

所以我应该做git pull 而不是基于生产回购? @BSeven 会更好:一般来说,pull --rebase 仅当您正在变基的内容(您的本地提交)尚未被推送(任何地方) git pull 不起作用。发生了一堆冲突。我猜git push -f 是唯一的解决方案... @BSeven 在您目前的状态下,确实可能需要一键填充。但是,如果您停止使用 rebase,将来就不应该有那么多冲突,并且会避免任何强制推送。

以上是关于如何解决与 2 个远程仓库的 git merge/rebase 冲突?的主要内容,如果未能解决你的问题,请参考以下文章

Git---报错:git Please move or remove them before you can merge 解决方案

Git---报错:git Please move or remove them before you can merge 解决方案

Git远程仓库 复制到另一个远程仓库 并保留commit信息。关于Git代码提交到远程仓库怎么撤回。.gitignore。git pull 时提示为何需要merge操作如何退出

Git远程仓库 复制到另一个远程仓库 并保留commit信息。关于Git代码提交到远程仓库怎么撤回。.gitignore。git pull 时提示为何需要merge操作如何退出

refusing to merge unrelated histories的解决方案(git 本地/远程仓库合并)

Git系列在IDEA操作Git本地仓库与连接远程Git仓库(推送合并拉取克隆操作)