Git: rebase 时不小心跳过了怎么办?
Git: What to do if accidentally skipped while rebasing?
我正在将 branch2 变基到更新版本的 branch1。有一些冲突,所以我进行了合并并 git add
ed 了冲突的文件。但是后来我没有做 git rebase --continue
,而是在我的终端上按下了,想都没想就按下了 git rebase --skip
。冲突是否会成功解决,或者 git 会由于 --skip
标志而恢复到其中一个版本?
rebase 代码相当棘手(在 2.13 中,交互式 rebase 现在主要由 sequencer 处理,而不是 git-rebase--interactive.sh
,尽管这是 from git-rebase--interactive.sh
).幸运的是 --skip
非常简单,在顶层 shell 脚本 git-rebase.sh, here and here 中进行了部分处理。使用 --skip
使 Git 运行 git reset --hard HEAD
在继续针对特定类型的变基(am
、interactive
或 merge
:前两个使用 git rerere clear
进行交互和合并变基,最后一个使用 git am --skip
进行 am
风格的非交互非合并变基)。
这意味着 Git 放弃了您谨慎的决定并继续尝试挑选 next 提交,并从那里继续变基。
如果您在这些解决方案中投入大量工作,您可以尝试恢复现在悬空的 blob(参见 Recover dangling blobs in git—note that the accepted answer says to use git show
on the hash IDs, which works, but if you have many to search through, it's simpler to look in the .git/lost-found/other
directory;添加的合并文件将在那里,与其他所有悬空 blob 混合保留在您的存储库中,这可能会很多)。您可能还想中止或撤消您的变基。
请注意,您可以保存此变基的最终产品或目前为止的产品。如果您在这里有其他好的解决方案,那可能会有用。在执行以下任一操作之前,只需将分支或标记名称设置为指向当前 HEAD
提交:
git rebase --abort # if it's still in progress, or
git reset --hard ORIG_HEAD # if it's finished now
回到开始整个变基之前的状态。然后,您可以使用 name~<number>
引用现有已完成的 rebase 部分从该提交向后计数,或 运行 git log <name>
查找 rebase 复制的提交及其分辨率,并剪切并通过它们的哈希ID。
我正在将 branch2 变基到更新版本的 branch1。有一些冲突,所以我进行了合并并 git add
ed 了冲突的文件。但是后来我没有做 git rebase --continue
,而是在我的终端上按下了,想都没想就按下了 git rebase --skip
。冲突是否会成功解决,或者 git 会由于 --skip
标志而恢复到其中一个版本?
rebase 代码相当棘手(在 2.13 中,交互式 rebase 现在主要由 sequencer 处理,而不是 git-rebase--interactive.sh
,尽管这是 from git-rebase--interactive.sh
).幸运的是 --skip
非常简单,在顶层 shell 脚本 git-rebase.sh, here and here 中进行了部分处理。使用 --skip
使 Git 运行 git reset --hard HEAD
在继续针对特定类型的变基(am
、interactive
或 merge
:前两个使用 git rerere clear
进行交互和合并变基,最后一个使用 git am --skip
进行 am
风格的非交互非合并变基)。
这意味着 Git 放弃了您谨慎的决定并继续尝试挑选 next 提交,并从那里继续变基。
如果您在这些解决方案中投入大量工作,您可以尝试恢复现在悬空的 blob(参见 Recover dangling blobs in git—note that the accepted answer says to use git show
on the hash IDs, which works, but if you have many to search through, it's simpler to look in the .git/lost-found/other
directory;添加的合并文件将在那里,与其他所有悬空 blob 混合保留在您的存储库中,这可能会很多)。您可能还想中止或撤消您的变基。
请注意,您可以保存此变基的最终产品或目前为止的产品。如果您在这里有其他好的解决方案,那可能会有用。在执行以下任一操作之前,只需将分支或标记名称设置为指向当前 HEAD
提交:
git rebase --abort # if it's still in progress, or
git reset --hard ORIG_HEAD # if it's finished now
回到开始整个变基之前的状态。然后,您可以使用 name~<number>
引用现有已完成的 rebase 部分从该提交向后计数,或 运行 git log <name>
查找 rebase 复制的提交及其分辨率,并剪切并通过它们的哈希ID。