如何撤消 Git Rebase

假设我们已经在本地 git 分支上执行了 git rebase 命令并将其推送到远程。

然后你意识到这不是你想要的。
我们会想知道采取哪些步骤来解决问题。

撤消 git rebase 的步骤

此代码将以快速而直接的方式撤消 git rebase:

如果我们有未提交的本地更改,则将它们全部备份,否则它们将丢失。

找出head提交

运行 git reflog 以查看我们之前的所有操作,然后找到分支的头部提交,就像在 rebase 开始之前一样。

提交 ID 将类似于 HEAD@{5}:

git reflog

重置为提交

在找出要返回的提交后,有必要使用 git reset 命令将当前分支重置为它。

请注意,在使用 --hard 选项运行 git reset 命令之前,我们必须确定,如下所示:

git reset --hard HEAD@{5}

给定的命令仅将本地分支移动到 HEAD@{5}。

推送到远程

现在我们可以使用 git status 检查本地分支的状态。

git status

如果我们看到给定的消息,则意味着本地分支和远程分支已经发生分歧,因为本地分支已返回到先前的提交,而远程分支仍在前面。

On branch myBranch
 Your branch and 'oroirn/myBranch' have diverged

要解决此问题,请强制远程分支返回本地分支所在的位置:

git push --force

重置分支

如果我们改变了主意,我们可以使用当前远程分支重置分支(假设远程的名称是 oroirn,默认情况下)如下:

git reset --hard oroirn/HEAD

什么是 Git Reflog

Git 保留分支更新的记录。

由于一种称为引用日志或者引用日志的机制,这是可能的。
git reflog 命令允许我们返回到提交,即使是那些没有被任何标签或者分支引用的提交。

重写历史记录后, git reflog 包含有关分支先前状态的信息,并允许在需要时返回该状态。

git rebase 命令

首先,这个命令是维护线性项目历史所必需的。
假设 master 分支在我们开始处理功能分支后立即进行。
我们希望在功能分支中检查主分支的最后更新,但主分支历史必须保持干净。
我们可以区分 git rebase 命令的两种模式。
它们是标准模式和交互模式。
在标准模式下,提交会自动在当前工作分支中进行并应用于传递的分支的头部。
我们当前的分支将被重新定位到 <base> 中。
交互式变基会话通过运行 -i 标志开始。
交互模式允许在过程中更改单个提交。
它让我们有机会通过更改、拆分和删除现有提交来清理历史记录。
它看起来更像是类固醇上的 git commit-amend。

日期:2020-06-02 22:16:46 来源:oir作者:oir