gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 14:02:53 24 4
gpt4 key购买 nike

在 rebase 期间,我经常想查看当前正在应用的提交消息,以帮助理解 merge 冲突。

我曾经跑过:

$ cat .git/rebase-apply/message

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

我在哪里可以获得当前正在应用的提交的消息(当 rebase 因 merge 冲突而暂停时)?

最佳答案

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

不幸的是,获取这些信息的接口(interface)并不稳定。但是,您要查找的文件确实仍然存在于现代 Git 中。

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

$ 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 信息的两个目录是:

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

如果 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

序列器代码(现在用于除遗留 rebase 之外的所有 rebase ,虽然我不确定它在 2.13 中使用了多少)比其中任何一个都不稳定 - 参见所有 GIT_PATH_FUNC the source code 中的行.其中之一是您的 rebase-merge/message文件。无论您是在进行交互式 rebase ,git rebase -m , 或 git rebase -s <em>strategy</em> ,此文件应该存在于适当的工作树相关路径中。对于非交互式 git rebase我认为该文件应该在 rebase-apply/msg 中相反。

关于git - 在 git rebase 期间查看当前提交的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53982206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com