Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git推送不';t忽略.gitignore中的文件_Git_Github - Fatal编程技术网

Git推送不';t忽略.gitignore中的文件

Git推送不';t忽略.gitignore中的文件,git,github,Git,Github,我提交了一些不应该提交的文件。 然后我将这些文件添加到.gitignore中,并执行了以下操作: git rm -r --cached somefile 我再次承诺 git状态显示: #分支实验 无需提交,工作目录已清理 我有git ls文件,这些文件没有列出 但是,当我执行git push origin somebranch时,这些文件仍在被推送(它们太大,无法推送到github,所以推送失败) 为什么会这样?我该怎么办?如果您提交了文件。 您可以使用以下方法取消最近的提交bu: git r

我提交了一些不应该提交的文件。 然后我将这些文件添加到.gitignore中,并执行了以下操作:

git rm -r --cached somefile
我再次承诺

git状态
显示:

#分支实验
无需提交,工作目录已清理

我有
git ls文件
,这些文件没有列出

但是,当我执行git push origin somebranch时,这些文件仍在被推送(它们太大,无法推送到github,所以推送失败)


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

如果您提交了文件。 您可以使用以下方法取消最近的提交bu:

git reset --soft HEAD^
然后:

git reset filename
然后将文件添加到.gitignore:

或:


这些文件仍在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
推送失败是因为推送提交的内容,文件不在当前签出的版本中并不重要,而是在项目历史记录中

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

$ git log --all --format=%H -- big.file
aaaaaaa Update .gitignore and remove big files
bbbbbbb accidentally add big files to repo
如果
big.file
大到足以阻止推送到github,则需要提交列表为空

从历史记录中删除文件 有许多方法可以防止试图将
big.file
推送到远程,但根据问题中的信息,最简单的方法是:

$ git reset --hard ccccccc
这将删除提交
aaaaaaa
bbbbbbb
,因此不会尝试将
big.file
推送到远程

git的目的是忽略
.gitignore
文件会影响将文件添加到存储库,它们会。这就是为什么将文件添加到
.gitignore
对“问题”没有影响的原因。

此处的解决方案将起作用,但您将在同一提交过程中丢失其他更改。如果您不想在同一次提交中丢失其他更改,并且您尚未推动提交,则必须将头更改回上一次提交,添加更改的文件并修改:

首先查找要返回的提交:

$ git log --oneline
然后,需要签出另一个分支,因为您无法更改活动分支中的头:

$ git checkout master
然后,将分支的头更改为较旧的提交:

$ git branch -f <branch_name> <commit_id>

该多步骤解决方案使我不丢失更改,并将新更改添加到以前的提交中

您可以提供git status的输出。如果您在提交aaaaaa和bbbbbb中做了一些您想要保留的其他更改,该怎么办?有没有一种方法可以在不删除其余提交历史记录的情况下通过手术删除有问题的big.file?我相信您想要的是
git rm--cached myUnwantedFile
@medley56,它将保留该文件的历史记录。Ethan git rebase,编辑提交AAAA和bbbbbb-这方面存在许多问题(我也回答了很多问题)。
$ git branch -f <branch_name> <commit_id>
$ git add <filename>
$ git commit --amend --no-edit