Bra*_*one 20 git git-merge merge-conflict-resolution
我目前有两个分支机构,我正在研究.由于软件更新,我必须完全更改文件夹结构.因此我在两个分支中移动文件.现在我达到了一个点,我想将我的工作分支合并到我的主分支中.
问题是存在合并冲突,告诉我文件仅由一个分支(added by them
或added by us
)添加.问题是两个分支都添加了该文件.
例如,我有一个纹理textures/texture1.png
.主分支刚刚将其移动到正确的位置(之前misc/textures/texture1.png
).工作分支将其移动到完全相同的位置并在之后进行编辑.此文件的合并冲突说:
added by us: textures/texture1.png
Run Code Online (Sandbox Code Playgroud)
关键是这不是我想要的文件!我想要来自其他分支的文件!
当我做
git checkout --theirs textures/texture1.png
Run Code Online (Sandbox Code Playgroud)
我明白了
error: path 'textures/texture1.png' does not have their veresion
Run Code Online (Sandbox Code Playgroud)
但是这个文件确实存在!我最近加了!这就是我想要的文件
我该如何解决这些冲突?
(如果需要更多信息!)
max*_*s ツ 13
你可以随时试试
git mergetool
Run Code Online (Sandbox Code Playgroud)
这将打开一个GUI,您只需单击相应的链接即可选择所需的更改.有时您需要进行手动更改.但在您的情况下,您只需选择一个文件图像.
a--b--c--M--d--f--E--g--h--i <<< master
\
\
x--M'--y--z <<< you
Run Code Online (Sandbox Code Playgroud)
你的情况看起来有点像上面(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
Run Code Online (Sandbox Code Playgroud)
然后将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
Run Code Online (Sandbox Code Playgroud)
这种方式冲突在创建后不会被直接解决.通常这会更容易,因为冲突会随着时间的推移而增长.
解决冲突时,仅需使用git checkout
正确的树形(分支名称,标记,提交的sha1 ...)即可从中获取文件:
git checkout theirBranchYouAreMerging -- textures/texture1.png
Run Code Online (Sandbox Code Playgroud)
如果您不希望所有“他们”的更改,则可以部分取消。为此,您需要git reset -p
有选择地从索引中删除任何不需要的更改,然后git checkout
也将它们从工作目录中删除:
git checkout theirBranch -- some/file.txt
git reset -p -- some/file.txt
git checkout -- some/file.txt
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18712 次 |
最近记录: |