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

问题描述 投票:0回答:2

我做了一个

git rebase -i
并重写了一次提交。

如何显示我提交的新提交消息和旧提交消息之间的差异? (例如,来自

git reflog
中的提交)

git-commit git-rebase git-diff
2个回答
3
投票

您需要首先使用

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 <commit-hash>
命令显示提交消息,将
<commit-hash>
替换为您在上一步中找到的哈希值:

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)
}

例如,

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

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
是 两个版本都添加了(因此没有相互差异)。

嗯。我想补充屏幕截图不会有什么坏处:

© www.soinside.com 2019 - 2024. All rights reserved.