(注意,我不是在尋找的答案git rebase -i
)如何「重新打開」git commit?
在善變的,我可以「重新打開」導入到我的補丁隊列中的承諾:
hg qimport tip
的承諾是「開放」在這個意義上,就像之前我承諾的那樣,我可以恢復,做hg diff
,hg status
等等。我怎麼在git中做到這一點?
(一切我已經在網絡上發現表明git rebase -i
然後選擇編輯,但那是不同的,因爲承諾是不是「開」以同樣的方式。)
(注意,我不是在尋找的答案git rebase -i
)如何「重新打開」git commit?
在善變的,我可以「重新打開」導入到我的補丁隊列中的承諾:
hg qimport tip
的承諾是「開放」在這個意義上,就像之前我承諾的那樣,我可以恢復,做hg diff
,hg status
等等。我怎麼在git中做到這一點?
(一切我已經在網絡上發現表明git rebase -i
然後選擇編輯,但那是不同的,因爲承諾是不是「開」以同樣的方式。)
你只需要移動你的頭指針起來而不進行任何更改到你的工作副本:
git reset --soft HEAD^
復位移動指針,和軟選項指定,它不應該改變任何文件。默認值是混合的,這會重置您的索引,而硬選項實際上會刪除自工作副本中提交以來發生的更改。
HEAD是一個「魔術」git指針,它始終指向當前參考(即工作副本的父級)。脫字號(^)表示父母。你可以重複使用這個,例如HEAD ^^引用上次提交的父代。
很好的答案,謝謝!你能記下你失去了提交信息,就像@武隆所做的那樣嗎? –
如果你真的想反覆使用它,'HEAD ^^^^^'和'HEAD〜5'一樣。 (更確切地說,'HEAD'是一個符號引用,指向當前簽出的分支,該分支指向當前簽出的提交,或者如果處於分離的HEAD狀態,則直接進行提交,且未檢查分支) – Cascabel
@PaulBiggar:避免丟失提交消息是修改而不是重置的重要原因。但是,如果您重置,您仍然可以間接恢復提交消息。 'HEAD @ {1}'是指先前簽出的提交,它(如果你還沒有做其他事情)將是預重置提交。你可以使用'git commit -c HEAD @ {1}'來使用它的提交信息作爲起點。 (如果你從那時起已經移動了HEAD,你可以使用'git reflog'來查找reflog中更遠的提交。) – Cascabel
假設你有沒有推送到您的遠程存儲庫,git reset --soft HEAD^
將以丟失提交消息爲代價「重新打開」您的上次提交。
使用git commit --amend
可以獲得相同的結果。
請參閱comparison chart之間Hg & Git。
Scott Chacon已經(精彩地)詳細闡述了'git reset'命令:http://progit.org/2011/07/11/reset.html 不要猶豫,看看它。
很有參考價值! –
另一種選擇是讓commit在那裏,改變一些東西,然後用它們來修改commit('git commit --amend')。 – Cascabel