git - 以编程方式显示 merge 期间使用的所有 git rerere 分辨率

标签 git git-merge git-diff git-rerere

当启用 rerere 进行 merge 时,并且所有冲突都通过 rerere 解决,它只会打印如下内容:

Resolved 'a.c' using previous resolution.
Resolved 'b.c' using previous resolution.
Resolved 'c.c' using previous resolution.

我想查看之前的差异(带有冲突标记)和解析之后的差异。我知道我能做到:

git checkout -m a.c
git diff
git rerere
git diff
git checkout -m b.c
git diff
git rerere
git diff
...

查看每个分辨率使用的前/后图像。但是是否有某种方法可以检索该信息或使用的 rerere 指纹,而无需手动解析 git merge hash每个 Resolved X using previous resolution. 的输出消息。

最佳答案

感觉您想要比较我们的他们的分辨率。来自 here看来 git diff 会拒绝比较 3 个文件。我修改了该帖子中的示例以提供此示例;

git diff --name-only master feature |\
    xargs -I % bash -c "diff3 <( git show master:% ) <( cat % ) <( git show feature:% )"

diff3 的输出更复杂,但您正在做的事情很复杂。

复制步骤

初始化存储库。

Horba@cake ~ $ git init MergeDiff/
Initialized empty Git repository in /home/Horba/MergeDiff/.git/
Horba@cake ~ $ cd MergeDiff/
Horba@cake ~/MergeDiff $ vim README.md
Horba@cake ~/MergeDiff $ git add README.md 
Horba@cake ~/MergeDiff $ git commit -m "Init."
[master (root-commit) 5250b3f] Init.
 1 file changed, 3 insertions(+)
 create mode 100644 README.md
Horba@cake ~/MergeDiff $ git branch feature
Horba@cake ~/MergeDiff $ git config rerere.enabled true
Horba@cake ~/MergeDiff $ git config rerere.autoupdate true
Horba@cake ~/MergeDiff $ vim README.md 
Horba@cake ~/MergeDiff $ git add README.md
Horba@cake ~/MergeDiff $ git commit -m "Work on master."
[master 8c12c43] Work on master.
 1 file changed, 1 insertion(+), 1 deletion(-)
Horba@cake ~/MergeDiff $ git checkout feature
Switched to branch 'feature'
Horba@cake ~/MergeDiff $ vim README.md
Horba@cake ~/MergeDiff $ git commit -m "Work on feature."
[feature 4b8ad3d] Work on feature.
 1 file changed, 1 insertion(+), 1 deletion(-)
Horba@cake ~/MergeDiff $ git checkout master
Switched to branch 'master'

进行初始 merge 。

Horba@cake ~/MergeDiff $ git merge feature 
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Recorded preimage for 'README.md'
Automatic merge failed; fix conflicts and then commit the result.
Horba@cake ~/MergeDiff $ cat README.md
# MergeDiff

<<<<<<< HEAD
Init - master changes
=======
Init - Work on feature
>>>>>>> feature

存储分辨率。

Horba@cake ~/MergeDiff $ vim README.md
Horba@cake ~/MergeDiff $ git rerere
Recorded resolution for 'README.md'.
Horba@cake ~/MergeDiff $ cat README.md
# MergeDiff

Init - Resolved
Horba@cake ~/MergeDiff $ git merge --abort

使用 rerere.autoupdate 再次 merge 。

Horba@cake ~/MergeDiff $ git merge feature 
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Staged 'README.md' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Horba@cake ~/MergeDiff $ cat README.md
# MergeDiff

Init - Resolved
Horba@cake ~/MergeDiff $ git status
On branch master
All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:

    modified:   README.md

传统的 diff 没有帮助。

Horba@cake ~/MergeDiff $ git diff feature master HEAD
diff --cc README.md
index ca2c305,ca2c305..24b898d
--- a/README.md
+++ b/README.md
@@@ -1,3 -1,3 +1,3 @@@
  # MergeDiff

--Init - master changes
++Init - Work on feature

diff3 可以做到。

Horba@cake ~/MergeDiff $ diff3 <(git show master:README.md) <(git show feature:README.md) <( cat README.md )
====1
1:1,3c
  # MergeDiff

  Init - master changes
2:0a
3:0a
====2
1:6c
3:3c
  Init - Resolved
2:3c
  Init - Work on feature

关于git - 以编程方式显示 merge 期间使用的所有 git rerere 分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52536509/

相关文章:

git - 如何撤消我的 git 工作副本中的错误权限?我应该再克隆一次吗?

git - 我是否应该将通过 alembic 生成的数据库迁移脚本置于版本控制之下

git - Android Studio GIT checkout 丢失模块

恢复 merge 提交后,git lab 未显示分支差异

linux - 在两个不同的 git repos 中的文件之间获取差异并应用于第一个 repo

git submodule update --init --recursive 挂起

Git pull 入一个未跟踪的 repo 副本

git - merge 没有通用历史记录但具有通用文件的git存储库

git diff 不适用于 Word 文档、--intent-to-add 和 pandoc diff 驱动程序

windows - 在 Windows 中使用来自 Git 的 Vimdiff 时,颜色会变高