美文网首页
执行git merge后撤销合并的commit

执行git merge后撤销合并的commit

作者: 鸿雁长飞光不度 | 来源:发表于2023-08-17 00:00 被阅读0次

场景(分支无他人提交的代码,通过reset --hard命令)

我有两个分支sandbox分支和dev分支,我本来在dev分支上开发,已经产生了很多个commit,我在sandbox分支执行了git merge dev, 执行这个命令产生了一个新的merge commit,过了一段时间发现需要把sandbox分支上的刚刚这个merge的合并全部撤销,这个该怎么操作?

解决方案

要撤销刚刚的合并(merge)操作,你可以使用git reset命令来回滚(reset)到合并之前的状态。下面是具体的步骤:

注意:在执行这些操作前,请确保你的工作目录中没有未提交的更改,否则可能会导致数据丢失。

  1. 查找合并之前的提交哈希值: 在你撤销合并之前,首先需要找到合并之前的最后一个有效提交的哈希值。可以使用以下命令来查看合并之前的提交历史:

    git log --graph --oneline --decorate
    

    找到合并之前的那个提交的哈希值(假设为 <commit-hash>)。

  2. 回滚到合并之前的状态: 使用 git reset 命令将分支回滚到合并之前的状态,这将使得分支指针指向你指定的提交:

    git reset --hard <commit-hash>
    

    这会将分支的历史更改到指定的提交,并且将工作目录和索引区域都回滚到该提交的状态。请确保在执行此命令时,你在正确的分支上(sandbox 分支)。

  3. 强制推送到远程分支(可选): 如果你之前已经将合并推送到了远程仓库,并且希望撤销远程仓库中的合并,你需要使用强制推送:

    git push -f origin sandbox
    

    请注意,强制推送会覆盖远程分支的历史,请谨慎使用。

这样,你就成功地将 sandbox 分支回滚到合并之前的状态,撤销了刚刚的合并操作。但要注意,这也会丢失合并带来的更改。如果你之后需要重新合并,可以选择不同的方式,如 rebase 或者处理冲突后的手动合并。

场景 (稳妥起见,采用revert)

但是我不记得之前的hashid了,而且在我执行git merge dev以后其他人又把自己的分支上的代码merge到sandbox了,此时如果我使用reset --hard会把其他人的代码也删除掉,所以不能用刚刚的方式,此时该怎么做?

解决方案

如果在合并后其他人也向 sandbox 分支合并了代码,那么确实使用 git reset --hard 可能会导致数据丢失。在这种情况下,你可以使用 git revert 命令来撤销某个提交的更改,而不会影响其他人的提交。

以下是你可以采取的步骤:

  1. 查找要撤销的合并提交: 使用 git log 命令查找你想要撤销的合并提交。可以使用类似以下的命令查看提交历史:

    git log --graph --oneline --decorate
    

    找到要撤销的合并提交的哈希值(假设为 <merge-commit-hash>)。

  2. 撤销合并提交: 使用 git revert 命令撤销合并提交的更改。这将创建一个新的提交,将合并带来的更改撤销掉。在你的 sandbox 分支上执行以下命令:

    git revert -m 1 <merge-commit-hash>
    

    这里的 -m 1 表示撤销主分支的更改,你可以根据实际情况选择 -m 2 来撤销被合并的分支的更改。

  3. 解决冲突(如果有的话): 如果撤销合并带来的更改引发了冲突,你需要解决这些冲突并提交解决方案。

  4. 推送到远程分支: 最后,将撤销的更改推送到远程仓库:

    git push origin sandbox
    

使用 git revert 可以在不影响其他人提交的情况下撤销合并带来的更改。然而,你可能需要处理冲突并理解撤销提交带来的影响。在操作前最好做好备份,以防万一。

相关文章

  • git 常用的命令

    修改提交得message 拿出某次提交内容 合并提交的merge信息 查看提交记录 撤销commit git di...

  • Git常用命令

    撤销$ git reset [--hard|soft|mixed|merge|keep] [commit|HEA...

  • git 合并多余的commit

    squash merge 在公共分支合并个人分支时,希望合并个人分支的多次commit时: 执行完命令后,squa...

  • Git 查找两个分支的共同节点

    使用 merge-base 命令: git merge-base 显示多个 commit 合并时,使用的共同 ba...

  • git fetch && git pull

    git pull 拉取代码 并合并 git fetch 拉取代码 ,如果需要合并 需要执行git merge ...

  • Git 常用命令

    撤销 查看log git log找到要撤销的commit id 撤销后并还原文件git reset --hard ...

  • GIT 合并的冲突解决途径

    大多数情况下,合并的命令为: git merge commit:提交ID或代表他的引用(分支,标...

  • 合并分支

    git merge --squash 分支名称 把分支中的多个commit合并成一次修改,合并到主干。因此主干上不...

  • 切换分支及合并分支

    切换分支执行:git checkout (分支名称) 合并分支:git merge origin/(分支名称) 合...

  • git 撤销git commit(内含车协git add)

    撤销git commit 只是撤销commit, git add里面的内容仍然存在,这种功能类似于用来更改git ...

网友评论

      本文标题:执行git merge后撤销合并的commit

      本文链接:https://www.haomeiwen.com/subject/meulmdtx.html