有没有办法让Git将文件标记为冲突?

Chr*_*dal 41 git merge mergetool

可以提交包含冲突数据的文件.有没有办法再次将这些文件标记为冲突,以便运行git mergetool将生成必要的文件并运行合并工具?

Gin*_*ngi 24

如果索引已经处于冲突状态,只需使用--conflict=merge标志检出文件:

git checkout --conflict=merge file
Run Code Online (Sandbox Code Playgroud)

如果索引是干净的,因为[错误地]添加了未解析的文件,只需在检出之前重置它:

git reset file
git checkout --conflict=merge file
Run Code Online (Sandbox Code Playgroud)

这将允许您正常恢复冲突解决(例如git mergetool).

注意:根据@fourpastmidnight的请求,将对@jakub-narębski的答案的评论推广到自己的答案中.:)


Jak*_*ski 22

您可以使用冲突标记获取文件内容git checkout --conflict=merge -- file,但如果您已使用git add file(或者如果GUI为您执行了此操作)清理了索引,则它将无效.

git update-index --unresolve,但它是hacky,并没有非常可靠的工作.我认为它恢复的状态对于git-mergetool来说是不够的.

您可能需要重做合并,或者用于git update-index --cacheinfo手动设置阶段版本... git-stash可以帮助您保持正确解决的冲突.

  • 如果索引是干净的,因为错误地添加了未解析的文件,你可以重置它:`git reset file; git checkout --conflict = merge file`. (6认同)
  • 什么是hacky和不可靠的? (2认同)

Chr*_*dal 6

最优雅的解决方案是从一开始就防止这个问题:
git config --global mergetool.[tool].cmd [command-line call]
git config --global mergetool.[tool].trustExitCode false

  • 是.这将导致Git每次都询问文件是否已成功合并,而不是依赖合并工具本身来如实报告成功或失败. (2认同)