我在git rebase中观察到非常奇怪的崩溃。我正在执行的操作没有改变,但是从一段时间以来他们的结果已经发生了变化。
而不是重新分支我从git rebase获取帮助消息,描述命令行选项,并使用一些十六进制数字文件bash.exe.stackdump
。
在执行git pull --rebase
期间观察到相同的行为。重新拉动提交是我的默认设置,因此这种不当行为非常烦人。
例:
$ git rebase master feature/tune-logging
usage: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] [<branch>]
or: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
or: git rebase --continue | --abort | --skip | --edit-todo
Available options are
-v, --verbose display a diffstat of what changed upstream
-q, --quiet be quiet. implies --no-stat
--autostash automatically stash/stash pop before and after
--fork-point ....
[ skip ... ]
Actions:
--continue continue
--abort abort and check out the original branch
--skip skip current patch and continue
--edit-todo edit the todo list during an interactive rebase
--quit abort but keep HEAD where it is
--show-current-patch show the patch file being applied or merged
我使用Windows 7 x64,最近更新。 git版本2.18.0.windows.1
我也使用SmartGit,运行相同的git可执行文件。
这是使用GIT_TRACE=2
获得的输出
$ GIT_TRACE=2 git rebase master feature/tune-logging
11:13:05.925709 exec-cmd.c:236 trace: resolved executable dir: C:/Program Files/Git/mingw64/bin
11:13:05.927709 git.c:654 trace: exec: git-rebase master feature/tune-logging
11:13:05.927709 run-command.c:637 trace: run_command: git-rebase master feature/tune-logging
11:13:06.348751 exec-cmd.c:236 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core
11:13:09.354050 exec-cmd.c:236 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core
11:13:09.356050 git.c:415 trace: built-in: git rev-parse --git-dir
11:13:09.778092 exec-cmd.c:236 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core
11:13:09.779092 git.c:415 trace: built-in: git rev-parse --git-path objects
11:13:10.122126 exec-cmd.c:236 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core
11:13:10.123126 git.c:415 trace: built-in: git rev-parse --is-bare-repository
11:13:10.452159 exec-cmd.c:236 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core
11:13:10.453159 git.c:415 trace: built-in: git rev-parse --show-toplevel
11:13:10.827196 exec-cmd.c:236 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core
11:13:10.829197 git.c:415 trace: built-in: git config --bool rebase.stat
11:13:11.210235 exec-cmd.c:236 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core
11:13:11.212235 git.c:415 trace: built-in: git config --bool rebase.autostash
11:13:11.548269 exec-cmd.c:236 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core
11:13:11.550269 git.c:415 trace: built-in: git config --bool rebase.autosquash
11:13:11.869301 exec-cmd.c:236 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core
11:13:11.871301 git.c:415 trace: built-in: git config --bool commit.gpgsign
11:13:12.330347 exec-cmd.c:236 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core
11:13:12.754389 exec-cmd.c:236 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core
11:13:12.755389 git.c:415 trace: built-in: git rev-parse --parseopt --stuck-long -- -h
usage: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] [<branch>]
or: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
or: git rebase --continue | --abort | --skip | --edit-todo
Available options are
-v, --verbose display a diffstat of what changed upstream
-q, --quiet be quiet. implies --no-stat
--autostash automatically stash/stash pop before and after
[skip ]
分支机构master
和feature/tune-logging
确实存在。
UPDATE。
尝试回滚git到一些以前的版本。
更新2。
我描述了我的实验。
在master的一些旧提交上创建一个新分支,添加虚拟文件,提交,删除虚拟文件,提交,rebase:
--c1--c2--c3--master
\
d1-add dummy file--d2-remove dummy file--
更新3
试过git版本2.15和2.14。版本2.15提供相同的崩溃,版本2.14工作。
现在就停止它,直到崩溃的原因得到解决。我会尝试提供有关订购的其他信息。
更新4
我通常使用SmartGit,它是git的GUI前端,但上面的所有结果都是使用命令行获得的。
内置的git rebase
现在更完整的Git 2.21(2019年2月),因为不是通过“git-rebase--am
”scriptlet来使用“am
”后端,内置版本的“git rebase”学会驾驶“ am
“后端直接。
built-in rebase
:直接致电git am
虽然脚本化的
git rebase
仍然需要依靠git-rebase--am.sh
脚本来实现rebase
和am
命令之间的粘合,但我们可以在内置的rebase中采用更直接的路径并避免完全使用shell脚本。这个补丁表示
git-rebase--am.sh
到C的直接端口,以及直接从builtin/rebase.c
中调用它的粘合代码。由于POSIX仿真层(称为“MSYS2运行时”,本身是Cygwin运行时的衍生物)的问题,这降低了Git for Windows遇到麻烦的可能性:当没有调用shell脚本时,完全避免使用POSIX仿真层。
(实际上,随着Git 2.22,2019年第二季度,内置的rebase完整稳定,而old script rebase is no more)