在git rebase期间查看当前提交的消息

时间:2018-12-30 23:14:51

标签: git

在重新设置基准期间,我经常希望查看当前正在应用的提交消息,以帮助理解合并冲突。

我曾经跑步:

$ cat .git/rebase-apply/message

哪个会很好地给我。但是,在运行git v2.20.1的新机器上,该文件在重新设置期间不再存在。

在哪里可以获得当前正在应用的提交消息(当变基暂停合并冲突时)?

2 个答案:

答案 0 :(得分:2)

TL; DR:如果您在添加的工作树中,请检查git rev-parse --git-path rebase-merge/messagegit rev-parse --git-path rebase-apply/msg

不幸的是,获取此信息的接口不稳定。但是,您要查找的文件确实存在在现代Git中仍然存在。

随着git worktree的到来,大多数状态信息已经(至少可能)移动了。现在存在相同类型的文件,但位置不同。要查找git相对路径名称为 P 的文件的位置,请使用git rev-parse --git-path P

$ git rev-parse --git-path HEAD
.git/HEAD
$ git worktree add ../git2 --detach
Preparing worktree (detached HEAD 5d826e9729)
HEAD is now at 5d826e9729 Git 2.20
$ (cd ../git2; git rev-parse --git-path HEAD)
[redacted]/git/.git/worktrees/git2/HEAD

从Git 2.13开始,可以在其中找到基准信息的两个目录是:

rebase-apply
rebase-merge

(和往常一样,使用git-path技巧来查找实际目录或其中的单个文件)。其中的文件最初是对称的,因为代码只设置了一个状态目录,然后根据需要将文件放入其中。文件集可能会在以后的任何Git版本中更改;但是,由于contrib/completion/git-prompt.sh,至少有一些希望保持一致。首先在rebase-merge内部查找以下内容:

head-name    the branch you were on when you started the rebase
msgnum       how many commits are already done (how far along are you)
end          the total number of commits to do
interactive  if exists, means this is git rebase -i (vs git rebase -m)

如果rebase-merge不存在,它将在rebase-apply内部(如果存在)查找:

next         how many commits are already done (how far along are you)
last         the total number of commits to do
rebasing     if exists, means this is an ordinary git rebase, in which case:
  head-name    the branch you were on when you started rebasing
applying     if exists, means this is a git am without rebase

如果既没有变基也没有应用文件,则提示代码将采用“ git-am或git-rebase”,而不会尝试进一步猜测。

如果两个目录都不存在,则提示设置代码将继续检查:

MERGE_HEAD        a merge is in progress
CHERRY_PICK_HEAD  a cherry-pick is in progress
REVERT_HEAD       a revert is in progress
BISECT_LOG        a bisect is in progress

定序器代码(虽然不固定,但仍不稳定,但现在已用于除传统变基以外的所有代码,尽管我不确定是在2.13中使用了多少),但还有更多—请参阅所有GIT_PATH_FUNC the source code中的行。其中之一是您的rebase-merge/message文件。无论您是进行交互式变基,git rebase -m还是git rebase -s strategy,此文件都应该存在于适当的依赖于工作树的路径中。我认为,对于非交互式的git rebase,文件应位于rebase-apply/msg中。

答案 1 :(得分:0)

在2.23版中,我看到以下命令:

git am --show-current-patch

它显示提交消息以及更多信息。