git commit --amend常常用來修改某個branch上最頂端的commit,大多數情況下,這個命令給人的感覺是用新的commit替換了原來的commit。git commit --amend與下面的語句等價:
git reset --soft HEAD^ //將branch的頭指針向前移動一個commit,--soft選項使得index和workspace tree的內容保持移動之前不變 ...do something... git commit -c ORIG_HEAD //-c選項使得新提交的log message重用ORIG_HEAD指向的commit使用的log message,但允許用戶編輯
舉個例子,假設master branch上的提交歷史如下圖:
運行git commit --amend時,過程如下:
圖中有陰影的commit就是master指針移動之前指向的commit,當git commit --amend運行結束后,這時因為沒有任何其他branch指向有陰影的commit,該commit會被廢棄。但是如果是下面的情況:
運行git commit --amend的過程如下:
上圖中加陰影的commit仍然是master指針移動之前指向的commit,但是由於該commit還被alt branch引用,因此這個commit不會被廢棄。