Git(扩展) - 撤消分支合并/硬重置并正确执行

时间:2013-05-20 15:00:19

标签: git merge branch reset git-extensions

是的,这可能听起来有点奇怪,但我觉得我做了些蠢事。

我有两个不同的分支(只有很少的变化),我想将一些变化从一个变为另一个。所以,在Git Extensions中,我去了Commands>合并分支。

不幸的是,它没有给我管理合并冲突的选项,而是在点击OK之后自动完成了它。由于这不是我想要的,我试图找到一种方法来尝试回滚。

我最终做的是选择其中一个分支的最后一个Commit(在合并之前,但是从任一分支中最新的Commit)并且硬重置回它。

不是将事物恢复到以前的状态(即合并没有发生),而是留下了两个分支的git扩展中的单个红线,每个都是相同的,以及最新的版本(即合并后)。我仍然可以在两个分支之间切换,但它们之间没有明显的区别。

所以这基本上就是我想做的事情(我为这个图表的粗略而道歉,我不确定如何最好地展示它):

Branch 1
   x---------------y
          \
           \ 
   x--------x------y
Branch 2

我想要从分支1合并到分支2中进行更改,但我希望将它们分开,并且我不想合并所有更改。

我上面提到的错误可以归还吗?什么是正确的方法呢?

1 个答案:

答案 0 :(得分:1)

听起来你将两个分支重置为同一个提交。您应该在该分支上合并之前将每个分支重置为提交。

所以,在这个图中

Branch1
   A------
          \
           \ 
   B--------C------D
Branch2

DO

git checkout Branch1
git reset --hard A
git checkout Branch2
git reset --hard B

之后,您可以使用git cherry-pick从一个分支中选择特定提交,然后将它们复制到另一个分支上。

所以,要创建此图

Branch1
   E-----G---------I
          \
           \ 
   F--------H
Branch2

DO

git checkout Branch2
git cherry-pick G