如何解决与 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 历史记录。 (例如,通过merge
或rebase
)。记住那些改变了你提交的校验和,然后 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操作如何退出