簡體   English   中英

如何從 git 提交中刪除文件

[英]How to remove file from git commit

我不小心在我的 git 提交中添加了一個大文件,現在我正試圖再次刪除它。

來自https://help.github.com/articles/remove-sensitive-data/我受到啟發嘗試這個

git filter-branch --force --index-filter \'git rm --cached --ignore-unmatch .ntvs_analysis.dat' \--prune-empty --tag-name-filter cat -- --all

但我結束了

>_

我期待的是 $ 而不是。 如果我輸入'

我收到這個錯誤

fatal: ambiguous argument 'rm': unknown revision or path not in the working tree
.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

之后我做了一些我想保留的承諾。 如何從我的提交中刪除大文件,以便我可以上傳到 github。

為了不丟失您添加的文件,您可以按照以下步驟操作:

  1. git reset --soft HEAD~1 - 這會將分支重置為之前的快照,同時保留所有文件暫存
  2. git reset HEAD file_to_remove - 這將從暫存中刪除 test.txt
  3. git commit -a -m "commit message" - 在沒有要刪除的文件的情況下重新提交你的暫存更改

只是一個重要說明 - 以上假設您的提交未推送到公共存儲庫(在這種情況下,不建議使用 git 重置)

問題是您轉義了單引號以啟動命令,因此--index-filter選項收到了單個參數'git >_是當您結束該行而沒有關閉您打算作為結束引號的未轉義單引號時的繼續提示。 錯誤發生是由於git誤解了 arguments 的結果序列。正確的命令很簡單

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch .ntvs_analysis.dat' --prune-empty

(刪除了第一個單引號和--prune-empty選項之前的反斜杠。我完全刪除了--tag-filter ,因為我不確定它是如何需要的,盡管--tag-filter cat -- --all幾乎可以肯定所有都是不正確的。)

  1. 恢復到之前的 git 提交使用

    # Moves pointer back to previous HEAD git reset --soft HEAD@{1}
  2. 只需刪除您的文件

    rm <filename>
  3. 然后再次提交您的更改

    git commit -a
  1. 恢復到上次提交

    git reset --soft HEAD@{1}
  2. 從暫存文件列表中刪除文件

    git restore --staged file-name
  3. 添加新提交

    git commit -m "commit-msg"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM