Git push不会忽略.gitignore中的文件

Hai*_*ang 3 git github

我提交了一些我不应该提交的文件.然后我在.gitignore中添加了这些文件,我这样做了:

git rm -r --cached somefile
Run Code Online (Sandbox Code Playgroud)

我再次承诺

git status 说明:

# On branch experiment
nothing to commit, working directory clean

我这样做git ls-files并且没有列出这些文件.

但是当我这样做时git push origin somebranch,这些文件仍然被推送(它们太大而不能推送到github所以它失败了).

为什么是这样?我该怎么办?

AD7*_*six 6

这些文件仍在您的git历史记录中.根据问题,git历史就是例如:

$ git log --oneline
aaaaaaa Update .gitignore and remove big files
bbbbbbb accidentally add big files to repo
ccccccc update foo
ddddddd update bar
Run Code Online (Sandbox Code Playgroud)

由于推送提交内容,推送失败bbbbbbb,因此文件不在项目历史记录中当前已检出的版本中并不重要.

通过检查特定文件/路径的历史记录也可以确认以上内容:

$ git log --all --format=%H -- big.file
aaaaaaa Update .gitignore and remove big files
bbbbbbb accidentally add big files to repo
Run Code Online (Sandbox Code Playgroud)

如果big.file足够大以防止推送到github - 您需要提交列表为空

从历史中删除文件

有许多方法可以防止尝试推big.file送到远程,但根据问题中的信息,最简单的方法是:

$ git reset --hard ccccccc
Run Code Online (Sandbox Code Playgroud)

这将删除提交aaaaaaa,bbbbbbb因此不会尝试推big.file送到远程.

.gitignore的目的

.gitignore文件会影响文件添加到存储库,它们不会影响索引中已有的文件.这就是添加文件.gitignore对"问题"没有影响的原因.