作出區別我是否可以顯示差異兩個提交之一是什麼是修正?換句話說,git是否將修改的提交保存在歷史記錄中?與修改承諾
與修改承諾
回答
修改後的提交與其他提交沒有區別。從這個意義上說,完全可以在「正常」提交和已修改的提交之間進行區分。
換句話說,git保存修改的提交歷史記錄嗎?
沒有一些列表包含所有已修改的提交,否。修改後的提交與其他所有提交一樣在歷史記錄中。
當你修改一個提交時,它基本上被刪除並被一個新的代碼替換(它也得到了一個新的提交哈希),它有原始提交+修改後的更改。
在git reflog
中,您可以看到最近的操作,並確實顯示修改提交。從那裏引用可用於例如撤消git commit --amend
。有關詳細信息,另請參閱How to undo "git commit --amend" done instead of "git commit"。
我不認爲我理解這個問題,但我認爲其中的一部分是因爲我認爲你對git commit --amend
的作用有錯誤的想法。
git中的提交實際上無法更改。 git commit --amend
所做的就是編寫新的提交一個故意改變的父ID。
讓我們來看看進行新提交的正常流程。
在您進行新提交之前,您需要修改工作樹中的某些文件,然後使用git add
來對這些更改進行暫存,以便提交新版本的文件。這個git add
把文件的新版本放到git的「索引」中,即它的暫存區域。
已經在上次提交中的文件已經在暫存區域中。因此,您將提交的新提交將包含所有原始文件,但您更改的任何內容都將是新版本,而不是舊版本。
現在你運行git commit
(不--amend
)和git執行以下操作:
- 收集提交的信息(從
-m
,-F
,或給編輯); - 獲取您的姓名和電子郵件,以及當前時間;
- 獲取當前提交(而不是新提交)的SHA-1 ID;
- 使用暫存區寫入「樹」對象:這是將與新提交相關聯的源樹;
- 使用所有這些信息(作者+提交者,樹,父ID和消息)創建一個提交對象 - 此新提交對象具有新的唯一SHA-1 ID;
- 最後,將新的ID寫入分支,以便分支標籤指向新的ID,而不是以前用作最尖端分支的分支。
的最後一步「成長的分支」,因此,如果您曾經有過一些提交,這樣的事情:
... <- E <- F <- G <-- master
你現在多了一個:
... <- E <- F <- G <- H <-- master
的分支名稱(master
或任何可能的)現在指向您的最新提交H
和H
指向使用作爲您最新的提交G
。
如果使用git commit --amend
,混帳改變這個序列只是一個很小位:而不是使新的提交(H
)點回當前(G
),混帳使得新的點回到當前的父(在這種情況下,F
):
G
/
... <- E <- F <- H <-- master
現在master
(或你對)指向H
,指向F
等任何分支。
如果你運行git log
,混帳與當前開始提交(H
)並記錄它,然後移動到它的父(F
),並將其記錄,依此類推。承諾G
似乎已經消失。
G
的SHA-1 ID是仍在(默認爲30天),在「reflogs」中。有一個HEAD
的推薦日誌,一個用於你當前的分支。如果您在分支master
上,而您剛剛製造了H
,則[email protected]{1}
是master
的上一個小費,即。或者,如果您將SHA-1 ID保存在屏幕的某個位置,則可以剪切並粘貼它以查看提交G
。
(該--amend
交換機還可以修改合併提交。此作品完全相同的方式如上,那只是意味着Git有從老枝尖複製所有父ID來新的。)
- 1. 修改角承諾
- 2. 將$ http代碼修改爲承諾
- 3. 與承諾
- 4. 角:與承諾
- 5. AngularJS與承諾
- 6. 與承諾
- 7. 承諾與angularjs
- 8. 承諾呼叫與承諾分辨
- 9. 混合firebase承諾與ES6承諾
- 10. Native承諾與藍鳥承諾
- 11. Git的分配修正承諾原來承諾
- 12. 如何與承諾
- 13. 窗口:與承諾
- 14. 與承諾的jQuery
- 15. 承諾與散裝
- 16. 與承諾工作
- 17. 環路與承諾
- 18. 承諾與CoffeeScript的
- 19. 期貨與承諾
- 20. PG-承諾將與$()
- 21. 流星與承諾?
- 22. 承諾內承諾
- 23. 承諾拒絕失敗,承諾承諾
- 24. 承諾中的承諾承諾
- 25. angular 2承諾承諾
- 26. 對Angular2的承諾承諾
- 27. 回覆承諾的承諾
- 28. 使用的IntelliJ修改git的承諾消息
- 29. 註冊一個推git的承諾不修改
- 30. 修改提交,這不是以前的承諾
好的,謝謝Tim,_git reflog_ - > _git diff commit1_hash amend_commit_hash_解決了我的問題! –