2015-11-02 107 views
-1

假設我在每天結束時提交我的代碼。大部分這些提交都是垃圾,我正在保存代碼,但大部分時間我都檢查了不完整的代碼,無法正常工作。一旦我完成了這個功能,我不希望那些日誌中的提交失敗。我想做一個最終的提交,但不保留每日提交的歷史記錄。這可能嗎?有沒有辦法將幾個git提交合併爲一個提交?

+0

爲什麼downvote? –

+2

[Squash我最後一個X使用Git一起提交]可能的重複(http://stackoverflow.com/questions/5189560/squash-my-last-x-commits-together-using-git) –

回答

1

您可以通過命令git commit --amend執行工作。

簡單地說,像往常一樣進行第一次提交。 然後通過命令git add <your stuff>打包下一次提交的內容。最後,不要使用通常的提交,請使用上面提到的那個。

有關更多詳細信息,請參閱here

0

如果要合併結帳所有本地提交做到這一點:

//this will revert your commits but will keep your changes 
git revert ... 
//and then normally 
git commit -m 'New feature' 
git push 
+0

現在有什麼選項用於git恢復? – Vogel612

+0

您可以指定提交散列:'git revert [hash]' – divix

+0

Git的'revert'通常用於進行新的提交,以反轉現有提交中所做的更改。您可能會想到'hg revert',這更像是'git checkout '在這個特定的用法。 – torek

0

相信這是可能的。什麼你要找的是sqashing,可以使用git rebase

時,您只需選擇要合併(他們必須是後續)的提交和詢問混帳交互式衍合

4

期間壁球他們是做。總的來說,git稱之爲「擠壓」,並且有很多方法可以做到。我建議作爲該過程的介紹的方法是使用交互式底座。

如果您正在使用「上游」(您推送的存儲庫,或以其他方式提取您發佈的提交),您通常會將其設置爲分支的上游。然後git rebase -i將爲您設置。如果不是的話,你仍然運行git rebase -i,你只需要再添加一件事情,即哪些提交交互重新綁定。例如,在這種情況下,您可以使用git rebase -i HEAD~4來處理最後四次提交。

你將要做的不是實際上重定位 - 你不會將提交鏈從一個起點移動到另一個起點 - 但git rebase仍然是機制。在做一個互動的底墊中,你會得到提交列表:

pick 1234567 commit message 
pick 2345678 another commit message 

Git的打開了這個名單,然後你就可以,只要你喜歡調整自己喜愛的編輯器,然後git的企圖在重新申請的提交列出的新訂單,以及您對pick行進行的更改。

改變從picksquash原因是承諾要與以前的(線以上)提交摺疊在一起,在這一點混帳再次打開編輯器在提交信息一條線,這樣就可以修改消息的新的(單一)提交將兩個現有提交壓縮在一起。

您還可以更改提交順序或省略提交。

請注意,分離提交(儘管可以完成)要困難得多,所以請確保在執行操作之前確實想要將其中的一些壓扁。

(什麼rebase過程確實是副本每次提交,最後提交正在進行一次任何額外的南瓜或鏈接地址插入。您的原始提交的鏈仍然在資源庫中,你可以找到他們請注意,因爲它確實提供了複製提交,所以您通常應該複製並修改您尚未發佈的提交,因爲沒有其他人擁有未發佈的工作,所以他們將永遠不會獲得看到新舊版本的工作感到困惑。)

相關問題