2010-02-23 210 views
21

由於詢問我的最後一個問題which turned out to be about rebasing with GIT,我已經決定我根本不想重新綁定。相反,我想:在沒有Rebase的GIT中重做提交歷史記錄

  1. 分公司
  2. 工作工作工作,檢查,並隨時
  3. 扔掉所有這些提交的,並假裝他們從來沒有發生過推(這樣一個乾淨的承諾在工作結束)

我做到這一點目前通過將文件複製到一個新的目錄,然後將它們複製回來到一個新的分支(在相同的點作爲我的工作分支支),然後合併到這master或其它地方。

這是不是很簡單,爲什麼?更重要的是:有更好的/ GIT的方式來做到這一點?git rebase -i迫使我合併(並挑選和壓扁)。

回答

10

您也可以使用git merge--squash選項。

+1

Squash會在每次提交時自動發生,我不明白這對我的問題有什麼幫助。並非如此,但我需要更多信息。 –

+2

當我想要將主題分支與主人合併時,我已經使用了'git merge --squash',但同時也將提交歷史記錄減少爲一次提交。 'git merge --squash'執行合併,但讓我們在提交合並之前提供一個提交消息。所以最終的結果看起來好像你只向主分支提交過一次。 –

+1

對不起,我花了三年才弄清楚這個答案是正確的。做得好! –

24

最簡單的事情就是軟重置。

所以檢出特性分支:

git checkout -b topic master 

工作,工作,再工作。

git commit 
git commit 
git commit 
git commit 

滿足於這一點,你可以在主

git reset --soft master 
git commit 

現在合併掌握的頂新單提交(這將是一個快進)和整理的特性分支。 (請注意,如果您準備記住或標記主人的位置,並且無需分支即可在主人身上工作,則無需執行此操作,您可以剛剛完成git reset --soft old-mastergit commit,並且您不需要這些最後的清理步驟)

git checkout master 
git merge topic 
git branch -d topic 
+4

優秀(+1),但這留下了問題:這是正確的方式(與Git或實際與任何(D)VCS)?所有的邏輯增量步驟都被壓縮了,如果在主題提交時存在一些令人討厭的錯誤,那麼找出並修復這些問題並不容易。 – VonC

+2

@Charles Bailey,謝謝你。 @VonC,這取決於。我每分鐘檢查一次或更少...太多的信息與沒有信息一樣糟糕。 –

+0

所以只需要清楚,git reset --soft some_branch將我切換到some_branch/some_commit而不接觸我的文件? –

相關問題