git - 两个分支添加的相同文件会导致奇怪的合并冲突

时间:2013-07-14 13:57:13

标签: git git-merge merge-conflict-resolution

我目前有两个分支机构正在研究。由于软件更新,我必须完全更改文件夹结构。因此我在两个分支中移动文件。现在我到了一个点,我想把我的工作分支合并到我的主分支。

问题在于存在合并冲突,这些冲突告诉我文件仅由一个分支(added by themadded by us)添加。问题是该文件已由两个分支添加。

例如,我在textures/texture1.png处有一个纹理。主分支刚刚将其移动到正确的位置(在misc/textures/texture1.png之前)。工作分支将其移动到完全相同的位置并在之后进行编辑。此文件的合并冲突说:

    added by us: textures/texture1.png

关键是这是我想要的文件!我想要来自另一个分支的文件!
当我做的时候

git checkout --theirs textures/texture1.png

我得到了

error: path 'textures/texture1.png' does not have their veresion

但此文件确实存在!我最近加了!这就是我想要的文件

如何解决这些冲突?

(如有需要,请提供更多信息!)

3 个答案:

答案 0 :(得分:12)

您可以随时尝试

git mergetool

这将打开一个GUI,您只需单击相应的链接即可选择所需的更改。有时您需要进行手动更改。但在您的情况下,您只需选择一个文件图像。

答案 1 :(得分:8)

a--b--c--M--d--f--E--g--h--i  <<< master
    \
     \
      x--M'--y--z              <<< you

你的情况看起来有点像上面(M和M'是提交移动而E是编辑纹理的提交)?你尝试合并z / i和git并不是很开心。

您可能会尝试在临时分支上将M与M'合并

a--b--c---M--d--f--E--g--h--i  <<< master
    \      \
     \      X                  <<< helper
      \    /
       x--M'--y--z             <<< you

然后将helper(“X”)与您(“z”)和master(“i”)合并。

a--b--c---M--d--f--E--g--h--i     <<< master
    \      \                 \ 
     \      X-----XX---------XXX  <<< helper
      \    /      /
       x--M'--y--z                <<< you

这种方式冲突在创建后不会被直接解决。通常这会更容易,因为冲突会随着时间的推移而增长。

答案 2 :(得分:4)

在解决冲突时,只需使用git checkout指示您想要获取文件的 tree-ish (分支名称,标记,提交的sha1 ...):< / p>

git checkout theirBranchYouAreMerging -- textures/texture1.png

如果你不想要所有&#34;他们的&#34;更改,然后您可以部分取消它们。为此,您需要git reset -p来有选择地从索引中删除任何不需要的更改,然后git checkout将它们从工作目录中删除:

git checkout theirBranch -- some/file.txt
git reset -p -- some/file.txt
git checkout -- some/file.txt