繁体   English   中英

如何将我的 git 合并冲突转换为类似 diff 的格式?

[英]How can I get my git merge conflicts into a diff-like format?

我正在合并两个涉及文件foo git 变更集(或者也许 - 在git rebase 'ing 的过程中,它合并了变更集),并且有一些合并冲突。 该文件如下所示:

text appearing in all changesets
<<<<<<< HEAD
text added on the head
=======
something else added on another changeset
>>>>>>> 1babf8ed... commit comment here
more text appearing in all changesets
added text, no conflicts
yet more appearing in all changesets

我的问题:

对于特定文件(如上面的foo ),如何显示冲突内容,以便 HEAD 修订版显示为已删除的文本,而另一个变更集(在我的示例中)显示为添加的文本? 换句话说,我怎么能做出一些工具对待之间的部分<<<<<=====作为其前缀-之间的部分和>>>>>=====由作为前缀+ ,或另一种方式?

笔记:

  • 最好的办法就是将类似 diff 的输出输出到标准输出流,因为我可以将其通过管道传输到另一个工具中。 但是与 git 的 diff 相关工具有更多联系的东西也是相关的。 如果我可以合理地避免它,我宁愿不必下载一些自定义实用程序/应用程序。
  • HEAD 和其他提交版本的并排显示也很有用

冲突不是差异,因为它不是一方的补充,另一方面是删除。

话虽这么说,像meld,kdiff3或p4merge这样的工具能够在“并排”视图中显示冲突,以帮助您修复它们。

编辑:
例如:

鉴于通过此脚本创建的情况:

#!/usr/bin/env bash

git init demoRepo
cd demoRepo
git commit --allow-empty -m "Init"
for i in {1..10}; do
  echo $i >> myFile.txt
  git commit -m "Add ${i} to my file" -- myFile.txt
done
git checkout -b branch2 HEAD~5
for i in A B C D E; do
  echo $i >> myFile.txt
  git commit -m "Add ${i} to my file" -- myFile.txt
done
git merge master

我们在myFile.txt有冲突。

meld设置为您的mergetool

git config --global merge.tool meld
# Use `--local` if you want this setting to be only in current repository

然后用:

git mergetool
# You may also call it without (pre)defining the tool in config, like:
#   git mergetool --tool=meld

Meld应该知道显示你与“并排”视图冲突。

解决冲突的融合

为此,您可以简单地使用git diff 你需要通过它:

  • 合并一侧提交的树状(例如,SHA1 句柄)(视为“-”)
  • 合并另一侧提交的树状(视为“+”)
  • (可选)要区分的文件名
  • 可选, -U999999显示整个文件(通过告诉它你想要围绕任何差异的多行上下文)

示例: git diff a829c71 d98ef2a -U999999 example.py

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM