【问题标题】:Git: What to do if accidentally skipped while rebasing? [duplicate]Git:如果在变基时不小心跳过了怎么办? [复制]
【发布时间】:2017-05-18 22:28:53
【问题描述】:

我将分支 2 重新设置为新版本的分支 1。有一些冲突,所以我进行了合并并git added 冲突的文件。但后来我没有做git rebase --continue,而是按下了我的终端,没想到按下了输入git rebase --skip。是否会成功解决冲突,或者由于--skip 标志,git 会恢复到其中一个版本吗?

【问题讨论】:

    标签: git git-merge rebase git-rebase


    【解决方案1】:

    rebase 代码相当棘手(在 2.13 中,交互式 rebase 现在主要由 sequencer 处理,而不是 git-rebase--interactive.sh,尽管这是由 git-rebase--interactive.sh 驱动的)。幸运的是--skip 非常简单,部分是在顶级shell 脚本git-rebase.sh, here 和here 中处理的。使用--skip 使Git 运行git reset --hard HEAD,然后继续执行特定类型的rebase(am、interactive 或merge 的跳过操作:前两个使用git rerere clear 进行交互式和合并rebase,最后一个使用git am --skip 用于am 风格的非交互式非合并变基)。

    这意味着 Git 放弃了你仔细的决议并继续尝试挑选 next 提交,并从那里继续 rebase。

    如果您在这些解决方案中投入了大量工作,您可以尝试恢复现在悬空的 blob(请参阅 Recover dangling blobs in git — 请注意,接受的答案是在哈希 ID 上使用 git show,这可行,但是如果你有很多要搜索的,它是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。

    【讨论】:

    • 对于快速解决方案 - 检查此答案中的 2 行代码。
    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2011-06-14
    相关资源
    最近更新 更多