微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有一种方法可以轻松轻松地撤消git merge?

如何解决有没有一种方法可以轻松轻松地撤消git merge?

我已经读到做git reset commitBeforeDoingMerge --hard不会撤消合并:

1pm-3pm This is my branch and I need to merge master into it
1pm-2pm This was master
1pm-2pm-3pm-4pm Merging ended up doing this,4pm being the merge commit
1pm-2pm-3pm if This is the result if you do git reset 3pm --hard,because it does not undo the merge,it just goes back to that commit in the branch that was merged.

现在,另一个建议是执行git revert 4pm -m 1,但是根据manual,这是有问题的:

通常您无法还原合并,因为您不知道哪一方 合并的内容应视为主线。此选项指定 主线的父编号(从1开始),并允许还原 相对于指定的父项撤消更改。

还原合并提交声明您将永远不需要树 合并带来的更改。因此,以后的合并只会 引入由非祖先提交引起的树更改 先前还原的合并。这可能是您想要的,也可能不是。

那么,有没有一种方法可以轻松便捷地撤消git merge?

解决方法

重设应该有效,但在主机上重设为e:

合并后:

a-b-d  (mybranch)
  \
   c-e (master)

myBranch到master的合并应该给出:

a-b---d  (mybranch)
  \    \
   c-e-f (master)

没有分支列出abcdef,ony abcef(主)

如果您在reset --hard e期间master,您将获得原始历史记录(上面的第一个记录)

如果您reset --hard d在使用master时,您已经移动了master HEAD,但是合并仍然存在:

a-b---d  (mybranch,master)
  \    \
   c-e-f
,

我已经读到做git reset commitBeforeDoingMerge --hard不会撤消合并

无论您读到什么,那都是错误的。这正是撤消合并的方法。

假设您正在将branch合并到master中。所以我们在合并之前就拥有了这个:

A -- B -- C (master)
 \
  X -- Y (branch)

好的,所以我们git checkout mastergit merge branch。结果是:

A -- B -- C -- D (master)
 \             |
  X -- Y (branch)

...其中D是合并提交,C和Y作为其父项。

如果您现在说git reset --hard <SHA-of-C>,您将回到此状态:

A -- B -- C (master)
 \
  X -- Y (branch)

这是一个完美的撤消。

,

我仍然不确定您在做什么,但这不是git merge的工作方式。我将尝试重新创建您所做的事情,也许您可​​以发现差异。

首先,我创建了两个起始分支:

git log --oneline --graph --all
* 0593ba1 (HEAD -> test) 3pm
| * eba415c (master) 2pm
|/
* 7f9a804 1pm

将主机合并到测试中。 git merge master -m "4pm"

git log --oneline --graph --all
*   6be609f (HEAD -> test) 4pm
|\
| * eba415c (master) 2pm
* | 0593ba1 3pm
|/
* 7f9a804 1pm

现在我们将测试重置为下午3点

git reset --hard 0593ba1
HEAD is now at 0593ba1 3pm
git log --oneline --graph --all
* 0593ba1 (HEAD -> test) 3pm
| * eba415c (master) 2pm
|/
* 7f9a804 1pm

现在我们看到2pm提交仅在master中,以确认唯一测试的日志

git log --oneline
0593ba1 (HEAD -> test) 3pm
7f9a804 1pm

这就是我合并和撤消合并的方式,请随时让我知道您在做什么,或者我还没有重新创建您的示例,您将如何做。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。