回答
(有關修改公共歷史的常見警告......)
由於需要修改的承諾,就做如下的最簡單方法之一:
1)檢查出使用gitk
或git log
你想使用git checkout <SHA>
(找到合適的SHA修改提交)。
2)使用git checkout -b <new branch name>
在此提交中創建一個新分支。
3)根據需要修改代碼。
4)使用git commit --amend
修改提交。
5)執行「到」重新綁定以將剩餘的提交從原始分支移過。要做到這一點,記得改變的SHA提交你從上面修改了它之前,和:使用git checkout <original branch name>
- 切換到原來的分支。
- 運行
git rebase --onto <new branch name> <before SHA of the modified commit>
。
這將產生在新分支頂部的原始分支上的SHA之後重放提交的效果。您可能需要在重新綁定期間解決合併衝突(照常)。
6)使用git branch -d <new branch name>
刪除新分支。
和往常一樣,看看gitk
中發生了什麼,以確保它是您的想法,並且(爲了安全起見)在進行rebase之前標記原始分支。
如果提交已被推遲,你可以通過
git revert <commit hash>
恢復它爲了得到提交哈希,只需使用git log
命令
這是可以做到的,但我寧願不這樣做。改變過去有副作用。您的分支或提交樹不會快進,您必須覆蓋服務器上的分支(如果有)。換句話說,除非你是最後一個看到它並且只在你的計算機上。這可能會產生更多問題,如果出現任何問題,您可能會丟失任何東西。
如果你準備好進入時間旅行和替代現實的世界!
歡迎git rebase
率先上手,創建要變基一個新的分支,這將創造你想要的情況下,任何改變不順心的只是刪除底墊和什麼都不會分支副本不斷變化。你可以只注意提交散列。
最簡單的入門方式是git rebase -i HEAD~N
,其中N是您想要更改的過去提交數量。
它應該打開一個編輯器,您可以將每行的第一個單詞更改爲類似編輯的內容。然後保存文件,你正在重塑!
重新綁定時,您可以做任何更改添加文件,刪除文件等。當你提交時,如果沒有衝突,它應該自動繼續。一旦完成了一切,那麼你將擁有一個重新設計的分支,其中的commit可以被刪除,編輯,重命名或任何你想要的。然後,如果一切正常。刪除舊的分支(未重新分配)推新的分支分支和瞧。
編輯
除非不是很清楚,否則打開編輯器。刪除一行將刪除選定的提交。如果你刪除了文件中的所有內容,它將不會執行任何操作。在重新綁定的任何時候,你都可以放棄它,並且git項目的狀態不應該改變。重新編制是一件相當安全的事情,因爲它實際上並沒有改變任何東西。如果您保留對舊提交的引用,那麼它們不會消失。重新綁定後,它會創建一條替代路徑。你將有一條老路和一條新路。舊路徑可能會被取消引用,並且任何引用此舊路徑的內容都應移至新路徑。
重要
順便說一句,有一件事我會做相反,是剛剛提交該修復舊提交的東西。我認爲必須僅在需要時才使用重新分配。例如,當你的同事偶然提交了一個4GB的數據庫備份。
首先進行更改並提交爲fixup! Original's commit message
。
然後決定你想在回購看到什麼(以及什麼是允許的)。 如果你不允許重寫歷史記錄,那麼就完全停下來,你可能會發生什麼。
如果允許,請在原始提交的父級上啓動交互式資產重置。您會看到前兩個條目是原創選項,並修復了該問題。將所有其他提交設置爲「編輯」,然後啓動。
該進程將停止在每次進一步的提交,在那裏編譯,重寫內容以瞭解更改,工作正常。並使用rebase --continue
。然後強行推動分支(並且執行爲歷史重寫案例規定的所有儀式)。
- 1. 我如何修改以前的git的承諾
- 2. Git:爲什麼我看到以前承諾的更改?
- 3. 回到以前的git的承諾
- 4. 修改角承諾
- 5. 與修改承諾
- 6. 混帳:擺脫以前的承諾,讓您可以修改
- 7. 恢復git回購到以前承諾
- 8. 修改提交,這不是以前的承諾
- 9. git的承諾,以新科
- 10. 的Git - 承諾在主到一個新的分支修改
- 11. Git的分配修正承諾原來承諾
- 12. 在承諾鏈中獲得以前的結果(Q承諾)
- 13. 保存更改變量的承諾
- 14. git的變更中承諾而沒有後續變化一個
- 15. 承諾以前的版本
- 16. 使用的IntelliJ修改git的承諾消息
- 17. Git分支先前的承諾
- 18. 承諾git on
- 19. 註冊一個推git的承諾不修改
- 20. 在500之前承諾,java.lang.IllegalStateException:承諾
- 21. git的變基犯規節目承諾
- 22. Git的變基承諾選擇
- 23. 的Git恢復到先前的承諾,但保持更新
- 24. 當git rebasing時,git顯示我目前通過rebase承諾的數量比承諾數額更大
- 25. 更新文本時承諾的git
- 26. git的承諾,以自定義父
- 27. 自動更新版本號之前承諾的git
- 28. Git子模塊 - 更新和承諾更改
- 29. Git blame承諾行
- 30. Git拉舊承諾
你也可以用'git的承諾,而不是拷貝--fixup原始sha1' /粘貼原來的承諾主題。 – adl