我看過GIT commit --amend in detached HEAD state。這個問題要求答案比需要更復雜。我想了解git commit --amend
在正常情況下的工作方式。git如何提交 - 準確的工作?
回答
假設你在一個乾淨的工作狀態,並且您的回購如下所示:
如果你再運行
git commit --amend
寫提交信息,保存並退出您的編輯器發生以下情況:
- 您的暫存區域 - 如果您沒有s進行任何新的更改,將與提交
f42c5
相同 - 用於創建新提交:31b8e
。它的父代將與您正在修改的提交(那些)相同:f42c5
。 - 將
master
分支引用移至指向新提交(31b8e
)。 HEAD
參考master
。
需要注意的是修改後的提交(f42c5
)現在從您的回購協議(因此它的「透明」在我的圖形樣式)的任何引用不可達。它仍然存在於你的存儲庫的對象數據庫中,但是當Git運行定期清理時,或者如果通過運行git gc
(垃圾回收)顯式觸發它,最終會被刪除。
附錄(基於Jason Baker's comment):需要注意的是,只要修改後提交,f42c5
,仍然存在於你的回購,你必須找出它的提交ID(例如的方式,通過釣魚它出於master
分支的reflog),你仍然可以檢查出來。運行
git checkout master # just to be sure that master is the current branch
git reset --hard f42c5
或(假設你沒有,在此期間,所做的任何新承諾上master
,復位master
,或以其他方式移動master
分支參考)
git checkout master # just to be sure that master is the current branch
git reset --hard [email protected]{1}
將使您在以下情況:
但現在,提交31b8e
將BEC ome無法訪問。
您可以通過「checkout」或通過reflog回到'f42c5'嗎?我承認這將是一件愚蠢的事情,但我很好奇,如果可以訪問舊提交* * – 2014-09-26 00:59:20
@JasonBaker是的,你總是可以檢查修改後的(現在無法訪問的)提交,只要它還沒有被垃圾收集,你有一個方法來提及它。 – Jubobs 2014-09-26 01:11:29
呵呵,現在命令不太正確,'git reset' * always *會重置* current *分支(這意味着'HEAD'也不能被分離)。把結賬大師放在第一位,等等...... – torek 2014-09-26 01:19:44
說你只是犯了「B」
... --- A --- B
^
|
master
HEAD
修訂「B」將建立一個平行的承諾成爲新的分支頭。
+---- B
|
... --- A --- B'
^
|
master
HEAD
B」是從提交的從B改變加時發出的git commit --amend
你已經上演了變化的組合產生。
要建立在此答案上,B'將包含來自B的更改的組合,以及您現在坐在回購中的任何分階段更改 – 2014-09-26 00:47:59
@Jason Baker,Added。 – ikegami 2014-09-26 00:50:16
據我所知,ammend
作品這樣的:
爲git commit --ammend
工作的變化ammend必須到腳手架區(SA)
- 它使
git reset -- soft
對帶回的變化在SA的最後一次提交(提交給ammend)中提交併將索引移動到先前的提交(在提交之前提交以進行修改)。一切都保持了git commit
命令之前的使用。 - 它使
git add
與所有文件添加到新的提交(這將是ammend承諾)。要添加的文件是那些在git reset --soft
登陸之前進入SA的文件,重置後此文件將保存到WD中,因此有必要將它們添加到SA以生成推薦提交。 - 使git提交。它將生成一個新的提交,因此推薦提交的新ID。對於這一點,git的承諾--ammend不應該被用來與推提交
如果使用--no-edit
註釋重新應用於ammended提交,否則你必須引入一個新的評論(becouse它是一個新的提交,每個提交需要註釋)。
有關腳手架區和工作目錄的詳細信息,請參閱Reset Demystified
- 1. git工作流後提交
- 2. 如何正確提交點火工作?
- 3. Git的 - 保留工作,無需提交
- 4. 如何在git中提交提交?
- 5. Git commit squashing(rebase -i):提交實際上如何工作?
- 6. Git如何恢復提交但記住工作?
- 7. 遠程git提交工具?
- 8. 當協作者提交不同的更改時,git如何工作(BitBucket)?
- 9. 如何恢復從git提交更改?
- 10. 用於本地提交,上游提交和部署的Git工作流程
- 11. 如何確定Git中櫻桃樹的提交者?
- 12. TFS Git提交鏈接如何存儲
- 13. Git + Intellij - 如何恢復本地提交?
- 14. 如何在Git中非交互地重新提交提交
- 15. 如何在一次提交中提交SVN和GIT?
- 16. 如何恢復本地提交git
- 17. Git衝突提交
- 18. 提交簽名如何工作?
- 19. Git Squash按作者 - 所有作者提交到一個提交
- 20. 如何提交提交,而不是工作目錄?
- 21. 如何讓git合併處理我的工作樹的未提交更改?
- 22. 如何跟蹤處理的git提交?
- 23. 我如何找到空的git提交?
- 24. 如何跳過git中的提交?
- 25. 如何刪除Git中的舊提交?
- 26. 自動備份的工作項目的git或HG上提交
- 27. 具有較早的git的更換工作目錄提交
- 28. python的Git提交
- 29. git:如何「鞏固」本地提交
- 30. Git損壞提交
我會生成圖表的簡單情況。等一下。 – Jubobs 2014-09-26 00:47:11
你如何製作你的圖表?我明天將要爲青年教Git。 – 2014-09-26 00:48:56
查看https://github.com/Jubobs/gitdags – Jubobs 2014-09-26 00:58:13