2013-05-20 678 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'並編輯複製的更改。 –