美文网首页
Git如何撤销merge操作

Git如何撤销merge操作

作者: woshishui1243 | 来源:发表于2019-01-28 11:49 被阅读13次

Git如何撤销merge操作。当 merge 以后还有别的操作和改动时,用 git revert:该命令就是为撤销某次提交而存在的;

首先,我是明白100047dcc这次提交是有问题的,这是问题的源头;
也就是说,只要我们把这次提交的给撤销了,就不会有问题了!

步骤 一 查看merge commit的详细信息

结果报错了,报了一个Commit is a merge but no -m option was given.
为什么呢?如果100047dcc这只是一个普通的提交,其实是不会报错的!
但是,这是一个merge的提交。那么在撤销时,git并不知道我要撤销具体哪次!
查看这次commit的详细信息。

git show 100047dcc

如下图:


从图中可以看到,每当你使用 git merge 时,是合并两个分支得到一个新的 merge commit。而Merge 这一行代表的是这个合并 parents,它可以用来表明 merge 操作的线索。
这个时候,怎么办呢?

步骤二 revert


我执行了这样的一个操作:

git revert 100047dcc -m 1

参数 -m 就是选择一个主线从左往右,从1开始数。在这个例子中,我要保留的是be8c6ff999,撤销的是ca4a7ff999。因此-m 后跟参数1。
接着其把代码冲突,然后我解决冲突,保留主分支的代码,去掉需要revert的代码。解决完冲突后,我执行如下操作:

$ git commit -m "ceshi"
$ git 

步骤三 revert 之后重新上线

假设狗蛋在自己分支 goudan/a-cool-feature 上开发了一个功能,并合并到了 master 上,之后 master 上又提交了一个修改 h,这时提交历史如下:

a -> b -> c -> f -- g -> h (master)
           \      /
            d -> e   (goudan/a-cool-feature)

突然,大家发现狗蛋的分支存在严重的 bug,需要 revert 掉,于是大家把 g 这个 merge commit revert 掉了,记为 G,如下:

a -> b -> c -> f -- g -> h -> G (master)
           \      /
            d -> e   (goudan/a-cool-feature)

然后狗蛋回到自己的分支进行 bugfix,修好之后想重新合并到 master,直觉上只需要再 merge 到 master 即可(或者使用 cherry-pick),像这样:

a -> b -> c -> f -- g -> h -> G -> i (master)
           \      /               /
            d -> e -> j -> k ----    (goudan/a-cool-feature)

i 是新的 merge commit。但需要注意的是,这 不能 得到我们期望的结果。因为 d 和 e 两个提交曾经被丢弃过,如此合并到 master 的代码,并不会重新包含 d 和 e 两个提交的内容,相当于只有 goudan/a-cool-feature 上的新 commit 被合并了进来,而 goudan/a-cool-feature 分支之前的内容,依然是被 revert 掉了。

所以,如果想恢复整个 goudan/a-cool-feature 所做的修改,应该先把 G revert 掉:

a -> b -> c -> f -- g -> h -> G -> G' -> i (master)
           \      /                     /
            d -> e -> j -> k ----------    (goudan/a-cool-feature)

其中 G' 是对 G 的 revert 操作生成的 commit,把之前撤销合并时丢弃的代码恢复了回来,然后再 merge 狗蛋的分支,把解决 bug 写的新代码合并到 master 分支。

相关文章

  • Git如何撤销merge操作

    Git如何撤销merge操作。当 merge 以后还有别的操作和改动时,用 git revert:该命令就是为撤销...

  • 2020-10-19 git 撤销操作

    git merge 或者 rebase 操作中失误,或者不想再进行该操作了可以使用 --abort进行撤销。例: 或者

  • git常用操作

    git从已有的分支创建新的分支 git切换新的分支 git如何取消merge 当我们使用git merge操作合并...

  • git 相关操作记录

    1.git merge 撤销 首先保证在 merge 时所在分支,如果没在,先切过去: 使用 git reflog...

  • Git常用命令

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

  • Git命令详解(转)

    Git命令详解 添加操作 提交操作 删除操作 撤销操作 在Git中,用HEAD表示当前版本。 撤销add 撤销co...

  • Git 撤销 merge

    见csdn的博客:http://blog.csdn.net/miniykyk/article/details/52...

  • Git - 撤销

    参考链接: 如何在 Git 里撤销(几乎)任何操作 撤销一个“已公开”的改变方法: git revert 重置“本...

  • 【原创】关于git操作

    一、误操作git pull之后如何撤销? 1、git reflog命令查看历史变更记录2、git reset --...

  • 收藏链接

    Git版本控制相关 Git版本恢复命令reset(转载) 如何在 Git 里撤销(几乎)任何操作 Git命令集 W...

网友评论

      本文标题:Git如何撤销merge操作

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