我运行Xcode,它自动运行git
操作。如果Xcode比git
更快地启动操作,这可能会导致某些rebase -i
操作失败。结果是:
fatal: Unable to create '.git/index.lock': File exists.
If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.
Xcode任务在我做任何事情之前就完成了,所以index.lock
已经不在了,我应该准备好继续。
好的,所以我尝试git rebase --continue
,因为其他操作现在已经完成,index.lock
应该不存在了。然而,这很快就爆发了,并显示了一条错误消息,如:
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:
git commit --allow-empty
Otherwise, please use 'git reset'
interactive rebase in progress; onto abcdef
Last commands done (X commands done):
pick abcdef Something
pick abcdef Something
Next commands to do (Y remaining commands):
pick abcdef Something
pick abcdef Something
You are currently rebasing branch 'foo' on 'abcdef'.
nothing to commit, working directory clean
Could not apply abcdef
在这一点上,我只是放弃了--abort
,重新开始。我失去了我制定的重新基准战略,也失去了我解决的任何冲突。我能做些什么来正确地恢复这个过程,不丢失任何数据?
出于这个问题的目的,"在重新定基之前关闭Xcode"不是我想要的答案。假设我已经忘记了做这件事,并且处于这种崩溃状态(而且,Xcode需要很长时间才能启动,这种情况很少发生)。
继续使用git rebase --continue
不起作用,因为git在实际应用有问题的补丁之前失败了。但你可以手动完成:
git apply .git/rebase-apply/patch
然后,在必要时解决冲突,并使用git add
将更改后的文件添加到索引中,最后使用git rebase --continue
。
我目前正在追踪产生锁错误的幽灵,并解决了您的问题。我还没有找到继续重新基准的方法,但您可以在全局范围内为用户启用git config --global rerere.enabled 1
的重新基准(重用记录的分辨率)。这既不能修复git rebase中明显的种族条件,也不允许您继续rebase,但它会在重试时重新应用您的冲突解决方案,使其不那么痛苦。
该提交引入的所有更改都是由当前分支上的一些提交引入的。
gitcherry-pick不工作