多次合并Master后的冲突

时间:2016-06-27 09:49:07

标签: git github merge fork

我是Git和GitHub的新手,并试图为一个项目做贡献,所以我做了一个分叉。该项目包含大量带文件的文件夹,我唯一做的就是添加两个文件夹,其中包含一些文件,修改一个文件。过了一段时间,我想跟上原始主人的最新情况,并按照https://help.github.com/articles/syncing-a-fork/中的建议从上游合并 - 所以我做了一个git merge upstream/master。这引入了很多关于我的fork主人的变化。

现在,几个月后我决定再次同步我的分叉并再次进行git merge upstream/master。这让我进入了10个冲突,这些冲突是关于文件的,我没有碰过自己。当然我可以尝试手动合并它们,但我想了解,发生了什么,这样我就不会破坏其他人的工作。

问题:

  • 为什么在上游的第二次合并中会发生这些冲突?

  • 我能否以某种方式将我的前叉基础改为最顶层(是什么反叛者做的?)

  • 如何找到"更改路径"两个相互矛盾的版本(它们来自哪里?)

如果有帮助,以下是我正在讨论的分支:https://github.com/0815fox/DefinitelyTyped

1 个答案:

答案 0 :(得分:0)

  • 可能原来的回购品已被重新定位,或者您的本地回购商已经过了,您需要进行提取和硬重置才能恢复同步。

  • 你不可能在不知不觉中做到这一点。这通常是不可能的,我能理解的唯一方法是通过重置回第一次提交并反向樱桃选择提交来创建一个裸分支。这不是rebase的作用。 Rebase可用于将提交压缩在一起,并在上游分支上的祖先提交后面移动新提交以进行快速合并。

您可以使用git log检查所有分支的合并路径。

git log --oneline --graph --decorate --all

如果您对文件中某个特定行的兴趣感兴趣,例如在调查冲突时,请使用git blame。

git blame -- filename

我在你完成调查之后修复的建议是创建一个新的分支,包括你的变化,重置上游分支,然后挑选你的提交范围。

git checkout -b mybranch
git checkout master
git reset --hard origin/master
git cherry-pick ^your1stSHA..yourLastSHA