保持你的歷史:
我去給你一個答案來完成自己的目標,但在不同的心態比你所要求的。雖然你可以通過在reflog中浮動提交,但我們在這裏沒有這樣做。
您將對一個分支進行一系列提交。您關心每個提交,因爲您需要從測試中引用它們。在你有一個工作分支後,你想和遠程分享你的工作,我們將改變我們的歷史。
假設:
你有一個origin/master
,master
和dev
分支
如何:
我們需要兩套代碼。如果你不想一次又一次地做這個,我們可以把它們作爲函數存儲在.bashrc中。每次運行代碼時,都會調用自動提交併運行代碼的函數。
1)提交每次運行時代碼:
git add --all
git commit --allow-empty-message -m ''
<command for running code>
現在你將有SHA1每次運行,你將有你的開發(本地)的歷史。爲了顯示每個提交做了什麼,您可以執行git log --patch
來顯示每個提交的行更改。
接下來,我們將在與遠程分享之前更改歷史記錄。我們會將所有更改壓縮到一個提交中。
2)遠程共享您的工作:
git checkout master
git merge --squash dev
git commit -m "<commit message for dev history>"
#fetch & push to origin/master after dealing with any remote issues.
這需要所有從每一個微小的補丁提交,並且它們都合併到一個補丁,有一個SHA1和一個消息。
此時,您可以用新的歷史記錄git branch -f dev
強制更新您的開發分支,然後垃圾收集可以接受您已經壓扁的提交。
結論(你與他們做後)
這實現你處理許多提交不會推到遠程,並且可以通過垃圾回收被刪除目標。每個單獨的提交SHA1都可以註釋到實驗結果中,使您可以追溯哪些更改會對您每次運行代碼時的結果產生什麼影響。它還允許您對本地更改進行版本控制。
'git commit-tree'看起來像你想要的。您可以使用它創建與任何分支無關的提交,並且不會檢出。 –
@RaymondChen這正是我想要回答的一個補充:首先完成所有變更。你想發佈它作爲答案嗎? – hvd
@ hvd好吧,我寫了它。 –