5

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

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 修订显示为已删除的文本,而其他变更集(在我的示例中)显示为添加的文本?换句话说,我怎样才能使某些工具将 and 之间的部分<<<<<视为=====前缀,以及将and-之间的部分视为前缀,或者相反?>>>>>=====+

笔记:

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

2 回答 2

1

编辑:git diff将显示两个修订之间的所有差异,其中可能包括许多不会导致合并冲突的差异。如果您只想显示合并冲突差异,我还没有解决方案。

如果您愿意查看两个修订版之间的所有差异,您可以简单地使用git diff. 你需要通过它:

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

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

于 2021-10-20T21:21:07.013 回答
0

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

话虽如此,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 应该知道显示您与“并排”视图的冲突。

为解决冲突而融合

于 2019-01-29T22:33:57.463 回答