我正在努力确保我的本地存储库和分支与上游保持同步。然而,我是 git 的新手,并且被困住了。我尝试更新我的 git 命令,但在尝试合并或变基时不断遇到合并冲突。我的流程是
获取
git fetch upstream
变基
git rebase upstream/deploy
推
git push origin deploy
对于项目的每个分支。 我先做了主要的。现在,当我尝试对其他两个分支、部署和解决方案执行相同操作时,我遇到了合并冲突。我隐藏了我的代码,所以当我尝试进行变基时,没有什么不同(
git diff --cached
显示没有差异),但我仍然遇到合并冲突。
我引用了另外两个问题来寻求帮助,但无济于事:how-do-i-update-or-sync-a-forked-repository-on-github 为什么 git-rebase-shows-conflicts-in-the-files-i-did-not-modify
我不确定是否应该尝试修复合并冲突,因为它们来自其他开发人员稍后创建的提交。这不会弄乱 git 历史吗?有人可以向我解释我做错了什么吗?
首先,查尔斯·达菲说的是对的;保持最新的方法是合并,而不是变基。当您尝试合并上游更改时,Rebase 简直太疯狂了。
所以只需进入一个分支
somebranch
,从 origin
获取最新信息,然后从 upstream
获取最新信息:
git fetch origin
git switch somebranch
git merge origin/somebranch
git fetch upstream
get merge upstream/somebranch
如果出现合并冲突,请解决它们。现在合并完成了,推送到你的分支:
git push origin @
对您尝试与上游保持同步的每个分支执行此操作。至于为什么会出现合并冲突,这只意味着自上次更新以来,您和上游接触了相同的代码块。
话虽如此,我想补充一点,这似乎是一个非常奇怪的情况。通常,当您分叉时,您不会触及来自上游的“任何”分支;你创建了一个完整的新分支并在那里完成你所有的工作。你这样做的原因就是你现在正在经历的原因;上游可能发生任何事情,因此您希望使与上游相关的分支保持原始状态,以便可以干净地更新。天哪,如果你还没有这样做过,那么此时扔掉你的叉子并重新开始可能会更好。