如何从git提交中删除文件

1dkrff03  于 2023-01-01  发布在  Git
关注(0)|答案(4)|浏览(205)

我不小心在git commit中添加了一个大文件,现在我正尝试再次删除它。
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了。

4uqofj5v

4uqofj5v1#

为了不丢失您添加的文件,您可以按照以下步骤操作:

  1. git reset --soft HEAD~1-这会将分支重置为上一个快照,同时保留所有暂存文件
  2. git reset HEAD file_to_remove-这将从暂存中删除test.txt
  3. git commit -a -m "commit message"-重新提交暂存的更改,而不删除文件
    有一点需要注意--以上假设你的提交没有被推送到公共仓库(在这种情况下不推荐使用git reset)
jvlzgdj9

jvlzgdj92#

问题是您转义了命令开头的单引号,以便--index-filter选项接收到单个参数'git>_是在您结束该行而没有结束预期用作右引号的 unescaped 单引号时的续行提示符。出现此错误是由于git误解了生成的参数序列。正确的命令是

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

(删除了第一个单引号和--prune-empty选项之前的反斜杠。我完全删除了--tag-filter,因为我不确定它是如何需要的,尽管--tag-filter cat -- --all几乎肯定是不正确的。)

oalqel3c

oalqel3c3#

1.使用恢复到上一个git提交

# Moves pointer back to previous HEAD
git reset --soft HEAD@{1}

1.只需删除您的文件

rm <filename>

1.然后再次提交回更改

git commit -a
wqsoz72f

wqsoz72f4#

1.恢复到上次提交

git reset --soft HEAD@{1}

1.从暂存文件列表中删除文件

git restore --staged file-name

1.添加新提交

git commit -m "commit-msg"

相关问题