如何在使用“git rebase -i”修改的提交消息中显示差异?

5
我做了一个git rebase -i并重新编辑了一个提交。
我如何显示我提交的新提交消息和旧提交消息之间的差异?(例如,从git reflog中的提交)
2个回答

4
你首先需要找到相关的提交哈希值,使用 git reflog 命令。
例如:
git reflog

a123b4c (HEAD -> main) HEAD@{0}: rebase -i (finish): returning to refs/heads/main
a123b4c (HEAD -> main) HEAD@{1}: rebase -i (pick): commit message 1
c456d7e HEAD@{2}: rebase -i (start): checkout HEAD~2
e890f1g HEAD@{3}: commit: old commit message 2

在这个例子中:
- `a123b4c` 是新提交的哈希值(具有重新编辑的消息), - `e890f1g` 是原始提交的哈希值(具有旧消息)。
现在,你可以使用 `git show --pretty=format:%s ` 命令显示提交消息,将 `` 替换为你在前一步中找到的哈希值。
git show --pretty=format:%s a123b4c
commit message 1

git show --pretty=format:%s e890f1g
old commit message 2

这将为您提供相应哈希值的提交消息,然后您可以手动进行比较。
你可以编写一个bash函数,使用diff命令来比较两个提交信息。
该函数接受两个参数:你想要比较的两个提交的哈希值。
diff_git_commit_messages() {
    if [ $# -ne 2 ]; then
        echo "Usage: ${FUNCNAME[0]} <commit-hash-1> <commit-hash-2>"
        return
    fi
    diff \
        <(git show --pretty=format:%s $1) \
        <(git show --pretty=format:%s $2)
}

e.g.,

$ diff_git_commit_messages 6bfa911 HEAD
1c1
< add file
---
> my new msg

谢谢 @VonC!我本来希望有一个单一的命令,同时也能进行差异比较,但这样也可以。现在我可以创建一个shell函数,将其变成一个单一的命令。 - Rob Bednark
1
@RobBednark 我明白了。我已经编辑了答案,包括这样一个脚本。 - VonC
1
@RobBednark 我明白。我已经编辑了答案,包括这样一个脚本。 - undefined
@RobBednark 谢谢你的编辑,看起来好多了! - undefined
@RobBednark 谢谢您的编辑,看起来好多了! - VonC
显示剩余2条评论

0
你说你只是重新表达了一个提交。在这种情况下,你可以使用git-range-diff(1)命令。这个命令会显示所有的变动,但我想,由于数据(文件)没有任何变动,所以对应的小上下文差异不会太分散注意力。
你需要一个两个提交共同拥有的基础提交。如果你有一个已经变基的功能分支,那么你可以使用你分支出来的那个分支。我们就假设是main
然后你首先需要旧版本。我在这个例子中将其标记为first以方便使用。
最后你需要你当前的版本。如果是HEAD,那么你可以使用@或者HEAD
首先,我写了这个提交信息:
Short message

然后我将其改写为这样:
Short message

Actually let's write a longer message.

结果如下:
$ git range-diff @~ first second
1:  69a2ff6 ! 1:  23825c2 Short message
    @@ Metadata
      ## Commit message ##
         Short message

    +    Actually let's write a longer message.
    +
      ## a (new) ##
     @@
     +hello


着色(在这里丢失)将区分元数据中的加号和数据中的加号(hello):元数据部分中添加的行在“版本”之间添加,而hello由两个版本添加(因此没有交互差异)。
好吧。我想补充一张截图也无妨:

interdiff


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接