2011-09-07 61 views
8

當我在本地編寫代碼時,有時我會提交尚不乾淨的代碼,或者將醜陋消息作爲臨時修訂。是否有任何Git命令將我們所有醜陋的提交合併爲一個?

然而,當我想我的代碼與別人合併,我想只有最後的快照,其他可以看到,(隱藏的很醜陋修訂)

例。 我叉0到我的本地庫,我使變化和測試,並與不潔淨的代碼

0-> 1-> 2-> 3-> 4-> 5-> 6(最終代碼)

犯當其他人拉代碼時,是否有可能讓其他人只看到最終狀態?而不見樹從1..5

我希望用戶將看到

0 -------------------> 6

我能想到的一種方法是創建一個補丁文件,但如果有某個文件必須被刪除或創建,那麼它不夠好。

+0

http://stackoverflow.com/questions/5308816/how-to-use-git-merge-squash – Gerry

回答

-1

我使用的答案來自@標記longair和@查爾斯·貝利以完成我的工作

讓說我有支...

master : A --> B --> C 
feature : \-->D --> E --> F 

第一種方式,工作目錄是「功能」分支

git reset --soft <A-hash> 
git commit -m 

我們不會看到任何以前的提交一切,都要寫入新的提交信息

第二種方式,工作目錄是「功能」分支

git rebase -i 

從編輯器,從變化挑壁球(或小號爲短)除第一個以外的所有提交

pick 00bb6f9 D 
s 4a251d9 E 
s 6047df8 F 

完成。通過這種方式,它將顯示先前的提交消息,我們可以將其編輯爲最終提交。

2

是的,使用git rebase -i,並擠壓提交。查詢this瞭解更多信息和一些示例。

4

您可以使用reset --soft將多個提交壓縮到一個新的全新提交中。隨着你在沒有最後的代碼分支上演的變化,你可以這樣做:

git reset --soft <sha1-of-0> 
git commit 

git commit提示,給出描述引入完全改變一個明確的提交信息。

2

假設您尚未將您的提交推送到遠程,那麼有幾種方法可以執行此操作。

一種選擇是使用

git rebase -i 

,讓你交互式的rebase編輯器。然後,您可以將除最後一個提交以外的所有提交標記爲「壓扁」

3

執行此操作最靈活的方法是執行交互式重新拼版以壓縮或修改提交。但是,您必須小心,不要重寫任何已公開的歷史記錄。例如,如果您正在使用master分支,並且您想要重寫併線性化所有不在origin/master(通常意味着尚未推送的工作)的提交,則可以執行以下操作:

git rebase -i origin/master 

這將啓動一個文本編輯器,其中顯示的每個提交都不在起源/主文件中,從最舊到最新顯示。如果您想要將任何提交與前一個提交合並,您可以將該行的開頭從pick更改爲squash。或者,如果您想以某種方式修改該提交,則可以將pick更改爲edit

使用交互式變基是做你要求什麼的最靈活的方式,它的去了解一個非常有用的工具,但在你所描述的確切情況,它可能是矯枉過正。首先,檢查git status的輸出是否乾淨,以確保您的暫存區域與HEAD的狀態相同。然後,你可以做一個「軟復位」回0,其中重置HEAD該承諾,但離開你的工作樹和索引(即臨時區域)不變。如果您隨後進行了提交,則您的索引將用於創建一個與6的狀態相同的新提交,但0作爲父項。即

git status # Check that your status is clean 
git reset --soft 0 
git commit -m 'Work that is totally flawless' 
相關問題