2013-05-20 123 views
0

好的,这可能听起来有点奇怪,但我认为我做了一些愚蠢的事情。Git(Extensions) - 撤消分支合并/硬复位并正确执行

我有两个不同的分支(只有很少的变化),我想合并一个到另一个的一些变化。所以,在Git扩展中,我进入了命令>合并分支。

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

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

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

所以这基本上是我想做的事(我这个图的生硬道歉,我真的不知道如何最好地显示它):

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

我有变化,我想合并从分支1到分支2,但我想保持它们都是分开的,并且我不想合并所有更改。

我上面犯的错误能够恢复吗?那么这样做的正确方法是什么?

回答

0

这听起来像你做了两个分支重置回相同的提交。您应该重置每个分支到该分支合并之前的提交。

所以,在这个图中

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

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

之后,你可以使用git cherry-pick从一个分支挑选特定的提交,并将它们复制另一方。

所以,要创建这个图

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

git checkout Branch2 
git cherry-pick G 
+0

权,使用结账复位东西的组合,你的第一个指令和一些副本存储在别处,我回来了有两个分支。然而,关于樱桃采摘,我不想合并整个提交,我想合并部分文件,比如说kdiff3。我不希望它通过并自动做它自己的事情。 – Interminable

+0

在提交更改之前,您可以'git cherry-pick --no-commit'并编辑复制的更改。 –