我提交了一些不应该提交的文件。然后我将这些文件添加到.gitignore中,并执行以下操作:
git rm -r --cached somefile
我再次承诺。git status
显示:# On branch experiment nothing to commit, working directory clean
我做git ls-files
和这些文件没有列出。
但是当我执行git push origin somebranch
时,这些文件仍然被推送(它们太大,无法推送到github,所以失败了)。
这是为什么?我该怎么办?
4条答案
按热度按时间fivyi3re1#
这些文件仍然在你的git历史记录中。根据问题中的内容,git历史记录是:
并且由于推送提交
bbbbbbb
的内容而导致推送失败,无论文件是否在当前 checkout 的版本中 * 它都在项目历史记录中 *。也可以通过检查特定文件/路径的历史记录来确认上述情况:
如果
big.file
足够大,可以防止推送到github --你需要提交列表为空从历史记录中清除文件
有很多方法可以防止尝试将
big.file
推送到遥控器,但根据问题中的信息,最简单的方法是:这将删除提交
aaaaaaa
和bbbbbbb
,因此不会尝试将big.file
推送到远程。.gitignore的用途
.gitignore
文件会影响将文件 * 添加 * 到存储库,它们是do not affect files already in the index。这就是将文件添加到.gitignore
对“问题”没有影响的原因。c86crjj02#
如果您已提交文件。您可以使用以下命令取消最后一次提交:
然后道:
然后将文件添加到.gitignore:
或:
wpx232ag3#
这里的解决方案是可行的,但是你会丢失同一次提交中的其他修改。如果你不想丢失同一次提交中的其他修改,并且你还没有推送提交,你必须将HEAD改回之前的提交,添加修改后的文件并修改:
首先找到要返回的提交:
然后,需要 checkout 另一个分支,因为您无法更改活动分支中的HEAD:
然后,将分支的头部更改为一个较旧的提交:
然后,将更改后的文件添加到当前提交:
然后,将更改修改为当前提交:
这个多步骤的解决方案使我不会丢失更改,也不会向以前的提交添加新的更改。
aelbi1ox4#
@AD7six回答后的另一个选项是创建一个没有历史记录的新分支,这样您就可以将此分支推送到远程服务器,完全忽略大文件。
您可以通过执行以下操作来完成此操作:
然后使用
来源:How can I purge all the history and push it