我目前有两个分支机构正在研究。由于软件更新,我必须完全更改文件夹结构。因此我在两个分支中移动文件。现在我到了一个点,我想把我的工作分支合并到我的主分支。
问题在于存在合并冲突,这些冲突告诉我文件仅由一个分支(added by them
或added 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
但此文件确实存在!我最近加了!这就是我想要的文件
如何解决这些冲突?
(如有需要,请提供更多信息!)
答案 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