我有一個本地開發分支「dev」和一個遠程「主」分支。對於「dev」分支,我有一個非常複雜的提交歷史(接近20次提交)。我試圖用如何在git的開發分支中合併本地提交?
"git rebase -i origin/master"
在「開發」,但是,我發現這個過程很容易出錯(你必須申請每次提交逐一化解矛盾..)和沮喪... 什麼我現在需要的是將「dev」處的提交歷史記錄壓縮爲單個提交,並將此大提交推送至「主」進行審閱和合並。 有沒有安全有效的方法來做到這一點? 非常感謝你們!
我有一個本地開發分支「dev」和一個遠程「主」分支。對於「dev」分支,我有一個非常複雜的提交歷史(接近20次提交)。我試圖用如何在git的開發分支中合併本地提交?
"git rebase -i origin/master"
在「開發」,但是,我發現這個過程很容易出錯(你必須申請每次提交逐一化解矛盾..)和沮喪... 什麼我現在需要的是將「dev」處的提交歷史記錄壓縮爲單個提交,並將此大提交推送至「主」進行審閱和合並。 有沒有安全有效的方法來做到這一點? 非常感謝你們!
我會做這樣的事情:
$> git merge-base dev origin/master
<commit>
無論返回將用於壓榨你的提交合並的點...
然後,假設你對你的Dev分支,只是做:
$> git reset <commit>
這將有效地把你的20次連續部分提交回「修改過的文件」,在git的狀態所有的變化...
然後,只需創建一個新的承諾一樣,(確保git的添加--all是你想要的這裏):
$> git add --all
$> git commit -m "my squeezed stuff"
然後解決您的衝突和推到原點......
希望它幫助,
如果重新設置當前分支是有問題的,做一個新的是一個很好的選擇(你這樣做),但你不需要複製一切。
一旦你創建了dev2(基於主),你可以checkout dev
,然後checkout dev2
不修改當前存在於工作目錄中的任何文件(!)dev
。
見 「switch git branch without files checkout」:
git symbolic-ref HEAD refs/heads/dev2
git reset
然後你就可以添加和一切承諾。
您可能想詳細說明爲什麼要嘗試這樣做。如果您在執行此操作時合併了衝突,那麼當您壓縮更改並將它們作爲一個提交應用時,將會產生相同的衝突。你想把歷史壓縮到一個單一的提交?你想在遠程主服務器上創建一個線性歷史記錄嗎?或者你介意進行合併? – djs