git rebase停止在git for windows中工作

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

我在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 ]

分支机构masterfeature/tune-logging确实存在。

UPDATE。

尝试回滚git到一些以前的版本。

  1. 随机选择的git版本2.12.2工作正常,但引起了SmartGit抱怨太老的git和建议使用版本至少2.16
  2. 将git升级到2.16.2 - 同样的崩溃。

更新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 crash rebase
2个回答
3
投票

更新了git到2.19,问题已经消失。

在安装新的git版本时,安装向导显示了两个复选框,要求启用新的实验性内置功能:rebase和stash。

我没有控制他们。

use external rebase and stash

更新为git 2.19.1.windows.1,现在打开了这些复选框。一切仍然有效。


1
投票

内置的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脚本来实现rebaseam命令之间的粘合,但我们可以在内置的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

© www.soinside.com 2019 - 2024. All rights reserved.