git:如何轻松判断我是否处于重新定位阶段

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

我正在编写一个bash单行代码,每次在git rebase --continue循环中运行while [ true ]时,我都希望自动执行某项操作。停止时,如果我仍在进行基础调整,我将执行X,然后我将要求重新进行基础调整。是否容易判断我是否还在改基地?我尝试使用if [ ! -f .git/REBASE_HEAD ]; then break; fi,但是重新设置完成后文件仍然存在。我看到.git/rebase-merge在重新设置基准时存在,并且在完成后消失了。我可以用它作为小费吗?

git rebase git-rebase
2个回答
2
投票

是的,可以。查看how git-prompt.sh does it设置您的git-prompt.sh

PS1

2
投票

我们可以看到if [ -d "$g/rebase-merge" ]; then __git_eread "$g/rebase-merge/head-name" b __git_eread "$g/rebase-merge/msgnum" step __git_eread "$g/rebase-merge/end" total if [ -f "$g/rebase-merge/interactive" ]; then r="|REBASE-i" else r="|REBASE-m" fi else if [ -d "$g/rebase-apply" ]; then __git_eread "$g/rebase-apply/next" step __git_eread "$g/rebase-apply/last" total if [ -f "$g/rebase-apply/rebasing" ]; then __git_eread "$g/rebase-apply/head-name" b r="|REBASE" elif [ -f "$g/rebase-apply/applying" ]; then r="|AM" else r="|AM/REBASE" fi

how git-prompt.sh detects being in a rebase

[git-prompt.sh中还有其他状态。

因为Git目录并不总是 if [ -d "$g/rebase-merge" ]; then if [ -f "$g/rebase-merge/interactive" ]; then r="|REBASE-i" else r="|REBASE-m" fi else if [ -d "$g/rebase-apply" ]; then if [ -f "$g/rebase-apply/rebasing" ]; then r="|REBASE" elif [ -f "$g/rebase-apply/applying" ]; then r="|AM" else r="|AM/REBASE" fi elif [ -f "$g/MERGE_HEAD" ]; then r="|MERGING" elif __git_sequencer_status; then : elif [ -f "$g/BISECT_LOG" ]; then r="|BISECTING" fi ,所以脚本使用__git_sequencer_status获取git目录(上面的__git_sequencer_status)。然后,您可以从上面看到其中的哪些目录和文件对应于哪些操作。

将其简化,您正在寻找两个目录之一。

  • .git
  • git rev-parse --git-dir
© www.soinside.com 2019 - 2024. All rights reserved.