2011-12-06 177 views
2

我有一個本地開發分支「dev」和一個遠程「主」分支。對於「dev」分支,我有一個非常複雜的提交歷史(接近20次提交)。我試圖用如何在git的開發分支中合併本地提交?

"git rebase -i origin/master" 

在「開發」,但是,我發現這個過程很容易出錯(你必須申請每次提交逐一化解矛盾..)和沮喪... 什麼我現在需要的是將「dev」處的提交歷史記錄壓縮爲單個提交,並將此大提交推送至「主」進行審閱和合並。 有沒有安全有效的方法來做到這一點? 非常感謝你們!

+1

您可能想詳細說明爲什麼要嘗試這樣做。如果您在執行此操作時合併了衝突,那麼當您壓縮更改並將它們作爲一個提交應用時,將會產生相同的衝突。你想把歷史壓縮到一個單一的提交?你想在遠程主服務器上創建一個線性歷史記錄嗎?或者你介意進行合併? – djs

回答

1

我會做這樣的事情:

$> git merge-base dev origin/master 
<commit> 

無論返回將用於壓榨你的提交合並的點...

然後,假設你對你的Dev分支,只是做:

$> git reset <commit> 

這將有效地把你的20次連續部分提交回「修改過的文件」,在git的狀態所有的變化...

然後,只需創建一個新的承諾一樣,(確保git的添加--all是你想要的這裏):

$> git add --all 
$> git commit -m "my squeezed stuff" 

然後解決您的衝突和推到原點......

希望它幫助,

+0

聽起來不錯,讓我試試看,謝謝,billaud! – rayeaster

+0

它不工作,因爲我已經與「dev」和「master」合併,運行$> git merge-base dev origin/master 會返回最新的提交「dev」和「master」都有......我想要的只是把我的承諾提交給新的提交,並推送給「主」進行審查。 – rayeaster

+0

那麼在那種情況下,只需做一個git reset --hard HEAD ^在dev上移除合併提交,然後按照我在那裏提出的建議進行操作。那有意義嗎? –

0

如果重新設置當前分支是有問題的,做一個新的是一個很好的選擇(你這樣做),但你不需要複製一切。

一旦你創建了dev2(基於主),你可以checkout dev,然後checkout dev2不修改當前存在於工作目錄中的任何文件(!)dev
見 「switch git branch without files checkout」:

git symbolic-ref HEAD refs/heads/dev2 
git reset 

然後你就可以添加和一切承諾。

相關問題