2011-09-12 23 views
0

我在本地回購中有一個提交層次結構,我想回滾到舊提交併應用HEAD提交中的一些更改,而不是全部。我該怎麼做呢?手動合併到Git中的不同提交

請考慮以下情況。我在我的回購如下的提交:

提交6(HEAD)
提交5
提交4
提交3
提交2
提交1

我重置犯2如下

git reset --hard commit2 

現在我想,例如,合併應用,直到提交6,但沒有那些犯下3的所有更改,並與其中的一些在提交5

如果我這樣做:

git merge commit6 

我最終會讓頭腦中的一切都沒有我所追求的選擇性。

我該如何達到目標?

乾杯 AF

+0

thanls烏拉圭回合的答覆。我試圖重建,但現在我被困在終端!我堅持終端中的文本輸入模式,它有一些命令選項文本和noop!我想退出但不知道如何。嘗試了一切,但沒有工作。除此之外,我沒有得到交互式編輯器的提示 – Abolfoooud

+0

好吧,我發佈了我的編輯器實際上是在終端(在Mac上)打開的VIM。我很熟悉這就是爲什麼我感到困惑。管理保存文件,現在正在執行合併過程。 – Abolfoooud

回答

2

在這種情況下,你可以使用基礎重建

你不「T需要重新提交2

在你的頭上,類型

git rebase -i HEAD~6 

並且會提示交互式編輯器。

您可以操縱您的提交看起來像 刪除該行承諾3

保存

那麼你的目標結果是你在找什麼

+0

thanls你的答覆。我試圖重建,但現在我被困在終端!我堅持終端中的文本輸入模式,它有一些命令選項文本,它就是這樣!我想退出但不知道如何。嘗試了一切,但沒有工作。除了我沒有得到交互式編輯器 – Abolfoooud

+0

的提示,我現在就到了。我可以合併提交併刪除它們。但是,我怎樣才能編輯我在任何提交中所做的更改?如果我在交互式rebase文件中進行「編輯」,我會進入一個狀態,在該狀態下編輯提交的消息但不會更改我所做的更改。我如何從那裏繼續? – Abolfoooud

+0

@Aolfoffoooud:據我所知,你需要刪除並重新創建提交。您可以將所需的提交重新排序到HEAD。然後你git重置 - hard HEAD ^再次進行更改。 –

1

您可以創建一個新的分支與剛選定的提交。

git checkout branch 
git checkout -b new_branch 

# remove unwanted commits 
git rebase -i HEAD~6 

# continue with merge 

或者你總是可以挑櫻桃提交。

+0

你可能是指'git rebase -i commit1'或類似的東西.... –

+0

@Mark你是對的。 –

3

您可以提交您想要的cherrypick

或者,如果你想修改歷史的地方(不應該做,如果你已經upstreamed更改)使用交互式的rebase:

git rebase -i HEAD~6 
# in editor that popped up remove line that corresponds to Commit3, save and quit