23

我目前有两个正在工作的分支机构。由于软件更新,我不得不完全更改文件夹结构。因此,我在两个分支中移动文件。现在我想将我的工作分支合并到我的主分支中。

问题是存在合并冲突,告诉我文件仅由一个分支(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

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

我该如何解决这些冲突?

(如果需要更多信息!)

4

3 回答 3

16

你可以随时尝试

git mergetool

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

于 2013-07-14T14:16:12.993 回答
9

在解决冲突时,只需使用从您想要获取文件的位置git checkout指示正确的树(分支名称、标签、提交的 sha1 ......):

git checkout theirBranchYouAreMerging -- textures/texture1.png

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

git checkout theirBranch -- some/file.txt
git reset -p -- some/file.txt
git checkout -- some/file.txt
于 2015-01-11T02:26:38.573 回答
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

然后将助手(“X”)与您(“z”)和主控(“i”)合并。

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

这样,冲突在创建后直接解决,而不是继续进行。这通常更容易,因为冲突往往会随着时间的推移而增加。

于 2013-07-14T15:14:28.037 回答