问题:
- 通过这样做,我
git merge在 168 个文件上发生了冲突,我用常规程序修复了其中一半以上。但是您需要找出无法解决的问题。通常的命令git diff显示所有更改的文件,并不清楚还有什么需要更正。
你需要什么:
- 找到一个很酷的命令,
git它只会显示那些仍然需要更正的文件。
我尝试了什么:
git diff --name-status我认为未更正的文件应该有一个特殊的状态,但两个选项U都显示Mgit status -sb只显示尚未在索引中的文件
例子:
git diff not-resolved.file显示这样的东西git diff diff --cc hello.rb index 0399cd5,59727f0..0000000 --- a/hello.rb +++ b/hello.rb @@@ -1,7 -1,7 +1,11 @@@ #! /usr/bin/env ruby def hello ++<<<<<<< HEAD + puts 'hola world' ++======= + puts 'hello mundo' ++>>>>>>> mundo end hello()git diff resolved.file用特殊的棍子展示冲突是如何解决的$ git diff diff --cc hello.rb index 0399cd5,59727f0..0000000 --- a/hello.rb +++ b/hello.rb @@@ -1,7 -1,7 +1,7 @@@ #! /usr/bin/env ruby def hello - puts 'hola world' - puts 'hello mundo' ++ puts 'hola mundo' end hello()
反思:
- 从示例中可以清楚地看出,git 确实看到了这些文件之间的区别,也就是说,它显然以某种方式标记了它们。
- 也许任务通常是无法解决的,也许 git 只是查看缺少“++<<<<<<< HEAD”的输出,并考虑到他们和我们版本的状态,以不同的方式装饰输出
- 如果 git 以某种方式标记固定文件,那么它将如何标记一个文件有 2 个冲突,一个是固定的,另一个不是
从例子中可以清楚地看出
+意味着该行来自以前的版本并且仍然存在于文件中-表示来自先前版本但不再存在于文件中的内容++表示该字符串仅存在于新文件中。
悲伤但到目前为止最可靠的选择是
grep -H -r "<<<<<<< HEAD" .- git不只是把冲突的开始和结束标记为“<<<<<<< HEAD”,也许没有这些标记就说明冲突可能已经解决了,不用grep也能发现
git diff --name-only --diff-filter=U | xargs grep '<<<<<<< HEAD'对于 bash,您可以获取所有未合并的文件并过滤掉包含 HEAD 的文件电源外壳解决方案:
这个想法很简单——我们得到一个未合并状态的文件列表,并查看它们是否仍然有字符串"<<<<<<< HEAD"。
将 intellij 并在那里合并,与冲突合并是一个交互式过程,cli 工具绝对不适合它。如果你没有 GUI/Java,你可以为 vim 安装插件,
坦率地说,meld/qdiff/raw git diff 远远落后于 intellij 合并工具。