RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 721125
Accepted
A K
A K
Asked:2020-09-21 07:41:37 +0000 UTC2020-09-21 07:41:37 +0000 UTC 2020-09-21 07:41:37 +0000 UTC

如何中止失败的变基?

  • 772

情况:在其中一个中间的命令行上对三个编辑进行交互式 rebase,我突然意识到我把提交倒错了地方。

当屏幕类似于:

# This is a combination of 2 commits.                                                  
# The first commit's message is:                                                       

commit 1

# This is the 2nd commit message:                                                      

commit 2

# Please enter the commit message for your changes. Lines starting                     
# with '#' will be ignored, and an empty message aborts the commit.                    
# HEAD detached at 299f1c3                                                             
# You are currently editing a commit while rebasing branch 'master' on '2ece15c'.      
#                                                                                      
# Changes to be committed:                                                             
#   (use "git reset HEAD^1 <file>..." to unstage)                                      
#                                                                                      
#       modified:   aaaaaaaaaaa.txt                  
#       modified:   bbbbbbbbbbb.txt                                    
#       new file:   ccccccccccc.txt                                 
#                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~

我看到这个新文件必须合并到一个完全不同的提交中。

我解决了我的问题......我打开了一个新控制台,询问git status(我确保我准时rebase)并要求这样做git rebase --abort,之后我vi没有保存在第一个控制台中就退出了(git运行它无法应用提交,因为需要一个稍微不同的提交 SHA ID),然后从中删除临时文件vi(我不记得它叫什么,它似乎与交换有关)。轻微的时间损失(我不得不再次进行第一次手术)被忽略了。但是,如果我一次对故事进行十几个编辑,并且在我注意到的时候已经完成了五个呢?

因此,现在我在想是否有更简单、最重要的常规方法。我可以想到比我使用的方法更多的方法。例如,有可能到达 end rebase,然后在阅读后reflog回滚到 rebase 之前的时刻。或者转到 rebase 操作的末尾,然后开始一个新的 - 将错误合并的提交分解为两个(以及一个更多 - 在必要时合并)。无论如何,这些都是我对服务器的未提交更改,我正准备在发送之前对其进行梳理。

在这种情况下,最好的选择是什么?

linux
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    sanmai
    2020-09-21T09:00:30Z2020-09-21T09:00:30Z

    在所有情况下最重要的事情:始终有备份。它可以是originGitHub 上或 GitHub 上某处的推送,也可以是保留原始提交以防万一的单独分支:

    git branch backup-before-rebase
    

    特别是,如果您尝试此答案中的建议,最好在单独的线程中进行:

    git checkout -b stackoverflow-721125
    

    例如,让我们删除一个提交:

    $ git branch
      master
    * stackoverflow-721125
    
    $ git log --oneline -4
    84bfed6 (HEAD -> stackoverflow-721125) Fifth
    b5a8b20 Fourth
    1824a85 Third
    22d1ad4 Second
    
    $ git rebase -i 22d1ad4
    Successfully rebased and updated refs/heads/stackoverflow-721125.
    

    如您所见,我们删除了一个提交:

    $ git log --oneline -4
    8a04495 (HEAD -> stackoverflow-721125) Fifth
    1824a85 Third
    22d1ad4 Second
    7d005b6 First
    

    但现在我们意识到我们错了,我们想把一切都原样归还。最简单的方法是回到原来的分支,删除并创建一个临时分支,然后重新开始。

    如果没有备份,或者困难并不可怕,该命令git reflog将显示哪些提交曾经是顶级的(即它们被 指向HEAD):

    $ git reflog -4
    8a04495 (HEAD -> stackoverflow-721125) HEAD@{0}: rebase -i (finish): returning to refs/heads/stackoverflow-721125
    8a04495 (HEAD -> stackoverflow-721125) HEAD@{1}: rebase -i (pick): Fifth
    1824a85 HEAD@{2}: rebase -i (start): checkout 22d1ad4
    84bfed6 HEAD@{3}: commit: Fifth
    

    在这个计算中,它指向了它指向后三步HEAD@{3}的地方,也就是说,在我们的例子中,正好在我们开始做 rebase 之前。HEAD当然,您不会计算步骤,而只是查看记录的记录是哪个命令完成的时刻,并在下面的点停止。

    $ git reset --hard HEAD@{3}
    HEAD is now at 84bfed6 Fifth
    

    如您所见,我们已将分支返回到与所有操作之前相同的状态和相同的提交。没有什么复杂或可怕的。


    如果您在编辑文件时意识到自己做错了什么怎么办?没问题!只要写一些 Git 不理解的东西,执行就会中止,并建议在一个命令中恢复所有内容。

    $ git rebase -i 22d1ad4
    > qwe
    > pick 1824a85 Third
    
    Warning: the command isn't recognized in the following line:
     - qwe
    
    You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
    Or you can abort the rebase with 'git rebase --abort'.
    

    让我们用一个命令回到起点:

    $ git rebase --abort
    
    • 5

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5