題 如何修改最後一次提交以取消添加文件?


我修改了兩個文件 ab 在最後一次提交中。但是文件 b 不應該提交,修改這個的工作流程是什麼?


92
2018-01-05 06:43


起源




答案:


更新(幾年後)

簡·胡德克 

將它從索引中刪除是微不足道的。

是的:您可以輕鬆地將文件重置為其索引內容,如 最近的回答 (由...撰寫) 馬特康諾利)建議:

git reset HEAD^ path/to/file/to/revert

HEAD^ 允許文件在先前的提交中訪問其內容 之前 最後一個。

然後你可以 git commit --amend,正如我最初在下面寫的那樣。


原始答案(2011年1月)

如果這是你的最後一次提交(並且你沒有把它推到任何地方),你可以 修改 它:
(先藏匿或保存 b

 git commit --amend

然後刪除b,重新提交。恢復b,你就完成了。

--amend

用於修改當前分支的提示。
  像往常一樣準備要替換最新提交的樹對象(這包括通常的-i / -o和顯式路徑),並使用當前分支的提示中的提交消息來提交提交日誌編輯器。
  您創建的提交將替換當前提示 - 如果它是合併,則它將當前提示的父項作為父項 - 因此將丟棄當前最高提交。


91
2018-01-05 07:08



... Then stash/delete b, re-commit..,這裡不應該這個詞 Then 是 after? - --amend 在stach / delete b之後,... - Xiè Jìléi
@謝繼雷:換句話說,首先保存b,然後提交--amend,然後恢復?真正。我已經更新了答案。 - VonC
憑藉git索引的強大功能,告訴任何人隱藏/保存文件只是簡單的愚蠢(-1)。將它從索引中刪除是微不足道的。 - Jan Hudec
@JanHudec是的,我已經相應地編輯了答案。我沒有像Stack Overflow那樣密切關注那個舊答案。無論如何,應該在SO上遷移99%的關於SU的git問題。 - VonC


  1. git diff --name-only HEAD^  - (可選)用於列出已更改的文件 最後一次提交。
  2. git reset HEAD^ path/to/file/to/revert - 至 重置 指數 到最後一個版本,留下工作副本 不變。
  3. git commit --amend  - 修改最後一次提交 包括 指數 變化

56
2018-03-18 04:21



Imho這是一個比接受的更好的答案。 - mik01aj
請注意,您不應該使用 git commit -a --amend (即,不添加文件)第3步,或者您將提交您正在嘗試刪除的編輯的工作副本更改。可選的步驟2.5可以是 git checkout path/to/file/to/revert也要清理你的工作副本。 - dmnd
另外 git rm --cached path/to/file/to/revert 取消添加文件而不從樹中刪除它。 - Jan Hudec


或者,如果您正在使用 git gui,您只需選擇“修改上次提交”選項,添加的文件將顯示在“已暫存”列表中,單擊其圖標將其移至“未暫存”列表並提交。


13
2018-05-06 07:47



@VonC:對於重度git用戶來說,編輯和拆分補丁是非常常見的操作,因此gui旨在使其變得簡單並且是IMO最佳工具。 - Jan Hudec
那一個有效!我沒有為該特定任務獲得其他選項的成功。謝謝你的提示! - Serguzest


如果要從上次提交中刪除b

git rm --cached b (will preserve the file in the working tree but remove it from the index)
git commit --amend

如果要刪除上次提交中對b的所有更改

(backup b)
(modify b to state before incorrect commit)
git commit --amend
(restore b)

8
2018-05-06 07:34



git rm --cached 並取消備份/恢復舞蹈(-1)。 - Jan Hudec
感謝您指出了這一點。我想分享我是如何做到這一點的,因為這是我在閱讀整個帖子後感到最舒服的方法。 - pingo


替代方案不需要索引hackery,但仍保留舊的提交消息:

$ git reset HEAD^
$ git add <all the files you want, excluding the one you don't want>
$ git commit -C HEAD@{1}

我喜歡這個,因為(a)它使用我經常使用的命令,(b)我能做到 git add -p 弄清楚我想要提交的確切內容。


3
2017-10-27 22:45