2012-06-26 93 views
0

如何從我上次提交中刪除文件,但保留其他所有內容?請注意,我還沒有推送任何東西到遠程存儲庫,所以我只需要在本地執行此操作。從上次提交中刪除文件

我的工作流程:

  • 編輯的幾個文件
  • 意外地創建一個名爲untitled.txt
  • 提交一切
  • 通知不必要untitled.txt文件
  • 刪除它
  • 一個新的文件? ?
  • 住幸福快樂的日子提前

謝謝!

回答

3

您可以使用git commit --amend輕鬆更改上次提交(消息,文件等)中您喜歡的任何內容。

所以,你會做這樣的事情:

git rm untitled.txt 
git commit --amend 
+0

你能否詳細解釋一下?我可以不知何故'git add untitled.txt'刪除的文件到最後一次提交,所以它會取消自己?該命令不適用於添加已刪除的文件。 – MJA

+0

@MatīssJānisĀboltiņš查看編輯........... –

+0

非常感謝!直到現在我還不知道命令「rm」。 – MJA

1

爲什麼不只是讓第二天提交刪除的文件?編輯提交歷史通常被認爲是不好的做法,並且在隨後的提交中刪除文件並不令人羞恥。

git rm untitled.txt 
git commit -m "Woopsy" 
+0

這是一個解決方案,但它會在存儲庫的歷史記錄中留下垃圾。 – nhahtdh

+0

我很難將錯誤歸咎於垃圾......我想我只是想擁有項目真實歷史的原始副本。 –

+0

@Ben我會說編碼錯誤不是垃圾,但git中的錯誤是「元錯誤」,而不是項目「真實歷史」的一部分?只是我的兩分錢。 –

0

如果你不僅想從最後一次提交中完全刪除文件,其他的答案也沒有問題。

但是如果文件的創建不是偶然的,那麼只會將該文件添加到提交中呢?

如果你想只從最後刪除的文件提交,但保留在文件中你的工作副本,讓您可以git add到另一個承諾,您可以添加--cachedrm命令:

git rm --cached wanted-for-another-commit-but-not-this-one.txt 
git commit -a --amend 

現在驗證它從提交了:

git show -p # no more diff between /dev/null and the file! 

確認它仍然存在:

ls -l wanted-for-another-commit-but-not-this-one.txt 

確認這是在未跟蹤文件列表中,有資格獲得git add

git status 

基本上我們所做的是從索引中刪除的文件暫存文件,同時保持工作副本。 git commit -a --amend命令不僅知道工作副本中的更改,還知道索引中的更改。它注意到從索引中刪除並將該更改傳播到新重寫的提交。