如何知道是否有正在进行的git rebase?
当我启动一个如何知道是否有正在进行的git rebase?,git,git-rebase,Git,Git Rebase,当我启动一个git-rebase-I时,我可以发出像git-rebase--continue或git-rebase--abort这样的命令。这些命令仅在重新基础正在进行时有效 我如何知道是否有正在进行的重设基准 (我非常希望您能提供一些关于再基础如何在内部运作的详细信息;git对赋予其“再基础进行中”状态的回购做了什么?)更新2021: 正如我在“”中提到的(2018年9月),git stash(和git rebase)不再只是脚本,而是用git.exe编译的二进制文件 这说明了如何仍然很难确定
git-rebase-I
时,我可以发出像git-rebase--continue
或git-rebase--abort
这样的命令。这些命令仅在重新基础正在进行时有效
我如何知道是否有正在进行的重设基准
(我非常希望您能提供一些关于再基础如何在内部运作的详细信息;git对赋予其“再基础进行中”状态的回购做了什么?)更新2021:
正如我在“”中提到的(2018年9月),git stash
(和git rebase
)不再只是脚本,而是用git.exe
编译的二进制文件
这说明了如何仍然很难确定是否正在进行调整
这在邮件列表中讨论过,导致类似“”的补丁:
由于引入了git-rebase-r
,这是可能的。但是我们的机器并不认为这是可能的,在合并的过程中,我们没有谈到任何正在进行的调整。 在此之前(2016年)有一个“正在进行再基础”检测的案例,带有“” 此函数
find\u shared\u symref()
用于以下几个位置:
内置/branch.c
中:用于检测分支是否在其他地方签出并拒绝删除该分支builtin/notes.c
中:用于检测一个注释是否合并到另一个工作树中branch.c
中,“git checkout
”和“git worktree add
”实际使用函数die\u if\u checked\u out()
”来查看分支是否已在别处签出并拒绝操作find_shared_symref()
无法检测到它,并声明“此处未签出分支
”,这并不是我们真正想要的
原始答复:2010年 首先,在rebase过程中就位(但不限于rebase命令) 但是你也可以看看2010年Git 1.7.0本身(你可以看到它是“内部的”)。
这样的句子可以给你另一个线索:
dotest="$GIT_DIR"/rebase-merge
test -d "$dotest" -o -d "$GIT_DIR"/rebase-apply || die "No rebase in progress?"
:
- 文件夹
似乎与rebase apply
一起出现rebase
- 但是文件夹
仅显示withrebase merge
rebase-i
-o
(请参阅),因此正确的方法是:
建议:
这将正确处理没有.git
目录的工作树和异常或非标准布局,还允许您从工作目录的子目录运行此测试
这是因为:确实解析“$GIT\u DIR/
”
并补充说:
也可以将错误重定向到null:
(test -d "$(git rev-parse --git-path rebase-merge)" || test -d "$(git rev-parse --git-path rebase-apply) 2>/dev/null"
Git 2.6+(2015年第3季度)将在重定基础期间打印更多信息: 参见(2015年7月6日),(2015年7月6日)和(2015年6月30日)作者。
(于2015年8月3日合并)
status
:在rebase-i期间提供更多信息
git status
在rebase-i
期间提供了有关在rebase期间执行的命令列表的更多信息。
它显示:
- 执行的最后两个命令和
- 接下来要执行的两行
它还提供了在.git
目录中查找整个文件的提示
尝试并检测提示在Git 2.26+上不起作用,如中所示
“git-rebase
”已经学会了默认情况下使用合并后端(即驱动“rebase-i
”的机器),同时允许“--apply
”选项使用“apply
”后端(例如,道德上等同于“格式补丁通过管道传输到am
”。
(可以将rebase.backend
配置变量设置为自定义。)
参见,,,,,,,,,(2020年2月15日)和,(2020年1月16日)的作者。
(于2020年3月2日合并)
git提示符
:更改基于交互的回扣提示
过去,我们对不同类型的折扣有不同的提示:
REBASE: for am-based rebases
REBASE-m: for merge-based rebases
REBASE-i: for interactive-based rebases
不清楚为什么这种区分是必要的或有用的;当
在提交中添加了提示(“改进bash提示以检测
不同的状态如未完成的合并”,2007-09-30,Git v1.5.5-rc0),它只是简单地添加了这三种不同的类型。
当时或许有一个有用的目的,但也有一些变化:
- 合并后端在交互式后端之上实现后被删除,导致基于合并的重新基准提示从
REBASE-m
更改为REBASE-i
- 交互式后端用于多种不同类型的非交互式回扣,因此提示的“
-i
”部分实际上并不意味着它以前的意思
- 再基地后端获得了更多的能力,有大量的重叠,有时很难区分它们
- 后端之间的行为差异也已消除
- 我们希望将默认后端从am更改为interactive,这意味着如果我们不更改提示,人们将在默认情况下得到“
REBASE-i
”,并且只有当他们指定了--am
或--whitespace
或-C
时,他们才会得到“REBASE
”提示
- 在未来,我们计划让“
--whitespace
”、“-C
”,甚至“--am
”运行交互式后端,只要它能够处理am后端所能处理的一切
出于所有这些原因,只需将任何类型的rebase的提示设置为“rebase
”
,你还有:
git rebase --show-current-patch
它显示交互式重基期间.git/REBASE\u HEAD的内容,该重基可以
REBASE: for am-based rebases
REBASE-m: for merge-based rebases
REBASE-i: for interactive-based rebases
git rebase --show-current-patch
$ cat .git/rebase-merge/done
pick 786139e lrg
edit 668b8a6 ktio
$
$ cat .git/rebase-merge/done
cat: .git/rebase-merge/done: No such file or directory
$
$ 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.)
ls `git rev-parse --git-dir` | grep rebase
ls `git rev-parse --git-dir` | grep rebase || echo no rebase
interactive rebase in progress; onto 5f8e534
Last command done (1 command done):
pick 1b7a450 BRANCH: another comment
No commands remaining.
You are currently rebasing branch 'rbBr' on '5f8e534'.
(fix conflicts and then run "git rebase --continue")
(use "git rebase --skip" to skip this patch)
(use "git rebase --abort" to check out the original branch)
Unmerged paths:
(use "git restore --staged <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both modified: User.java
no changes added to commit (use "git add" and/or "git commit -a")
interactive rebase in progress; onto 5f8e534
Last command done (1 command done):
pick 1b7a450 BRANCH: another comment
No commands remaining.
You are currently rebasing branch 'rbBr' on '5f8e534'.
(all conflicts fixed: run "git rebase --continue")
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: User.java
PS C:\my_git_repos\learning_git> git rebase --continue [detached HEAD 9645135] BRANCH: another comment
1 file changed, 1 insertion(+)
Successfully rebased and updated refs/heads/rbBr.