如何知道是否有git rebase正在进行?
当我启动git rebase -i
,我可以发出诸如git rebase --continue
或git rebase --abort
。 这些命令只有在进行重新绑定时才有效。
我怎样才能知道是否有一个正在改变?
(我将非常感谢一些关于rebase如何在内部工作的细节; git对回购有什么作用,使它具有“正在进行中的rebase”状态,?)
首先,在rebase期间有一个ORIG_HEAD
(但不限于rebase命令)
但是你也可以看一下2010 Git 1.7.0 git-rebase.sh
脚本本身(就像你可以得到的“内部”一样))。
像那些线可以给你另一个线索:
dotest="$GIT_DIR"/rebase-merge test -d "$dotest" -o -d "$GIT_DIR"/rebase-apply || die "No rebase in progress?"
sabgenton 评论 :
- 文件夹
rebase-apply
似乎与rebase
, - 但文件夹重新
rebase-merge
只显示与rebase -i
。
嬉皮士也在2017年评论说:
编码指南不鼓励使用
-o
(请参阅Documentation/CodingGuidelines
),所以现在(2017,也是从2011年开始,Git 1.7.6)的正确方法是:
(test -d ".git/rebase-merge" || test -d ".git/rebase-apply") || die "No rebase in progress?"
杰拉比 在评论中build议:
(test -d "$(git rev-parse --git-path rebase-merge)" || test -d "$(git rev-parse --git-path rebase-apply)
这样可以正确处理没有
.git
目录的工作树和非常规或非标准布局,并且还允许您从工作目录的子目录运行此testing。
这是因为git rev-parse --git-path <path>
:确实parsing了“ $GIT_DIR/<path>
”。
Git 2.6+(2015年第三季度)将会在更新期间打印更多信息:
请参阅提交592e412 , 提交84e6fb9 (2015年7月6日), 提交84e6fb9 (2015年7月6日),并提交由GuillaumePagès( gitster
) 提交的df25e94 , 提交05eb563 (2015年6月30日) 。
(由Junio C gitster
合并- gitster
-在提交178d2c7 ,2015年8月3日)
status
:在rebase -i
期间提供更多信息
git status
在rebase -i
给出了更多的信息,关于rebase期间完成的命令列表。
它显示:
- 最后两个执行的命令
- 接下来的两行将被执行。
它也提供了在
.git
目录中查找整个文件的提示。
您也可以在contrib/completion/git-prompt.sh
中的__git_ps1
函数中检查这种检测方式,它可以用于git-aware bash提示符:
if [ -f "$g/rebase-merge/interactive" ]; then r="|REBASE-i" b="$(cat "$g/rebase-merge/head-name")" elif [ -d "$g/rebase-merge" ]; then r="|REBASE-m" b="$(cat "$g/rebase-merge/head-name")" 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
如果你有EasyGit , eg status
会告诉你:
$ eg status (Not currently on any branch.) (YOU ARE IN THE MIDDLE OF A INTERACTIVE REBASE; RUN 'eg help topic middle-of-rebase' FOR MORE INFO.) Changes ready to be committed ("staged"): modified: .gitmodules renamed: config_loader.rb -> code/config_loader.rb Newly created unknown files: vendor/ (YOU ARE IN THE MIDDLE OF A INTERACTIVE REBASE; RUN 'eg help topic middle-of-rebase' FOR MORE INFO.)
在彩色terminal上,通知非常突出:
( eg help topic middle-of-rebase
显示文档“ 如何解决或中止不完整的资产重置 ”)。
如果正在进行互动式重新贷款,这将告诉您在这个过程中:
$ cat .git/rebase-merge/done pick 786139e lrg edit 668b8a6 ktio $
现在我正在编辑交互式底座的“ktio”补丁。
如果没有发生重build,它将如下所示:
$ cat .git/rebase-merge/done cat: .git/rebase-merge/done: No such file or directory $
从bash命令行:
ls `git rev-parse --git-dir` | grep rebase
这将返回退出代码0(成功),如果有一个rebase文件夹,它会输出rebase文件夹到STDOUT。 如果你不在 rebase的中间,那么它将不输出任何内容,并返回非零的退出代码。 所以你甚至可以做这样的事情:
ls `git rev-parse --git-dir` | grep rebase || echo no rebase