删除未推送的git提交,但保留所有本地工作

删除未推送的git提交,但保留所有本地工作,git,git-commit,Git,Git Commit,我的本地目录中有一些大文件,包括在提交中,我认为这些文件阻止了我的git推送: Counting objects: 194, done. Delta compression using up to 4 threads. Connection to bitbucket.org closed by remote host. fatal: The remote end hung up unexpectedly Compressing objects: 100% (190/190), done. err

我的本地目录中有一些大文件,包括在提交中,我认为这些文件阻止了我的git推送:

Counting objects: 194, done.
Delta compression using up to 4 threads.
Connection to bitbucket.org closed by remote host.
fatal: The remote end hung up unexpectedly
Compressing objects: 100% (190/190), done.
error: pack-objects died of signal 13
error: failed to push some refs to 'myrepo'
至少,我相当肯定是文件的大小导致了推送失败。我只想删除提交的记录,这样我就可以返回并为这些文件添加一个.gitignore,提交并再次推送

git状态提供:

On branch master
Your branch is ahead of 'origin/master' by 3 commits.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean
是否可以删除提交,同时保留工作目录中的所有更改?我正在努力寻找一个答案,这个答案似乎不涉及将我的存储库重置为来自主服务器的早期提交(我希望保留我最近所有的本地工作!)。任何建议都将不胜感激。

运行:

git reset origin/master 
这会将基本提交移回原点/主节点,但保留工作树的原样。从这一点上,您可以添加
.gitignore
并执行新的提交


提交仍将存在于本地回购中,但不会是新提交的祖先,因此在推送时不会被传输。

为此,您可以使用
git reset--soft
。要快速恢复3次提交,可以使用
HEAD^3
代替提交id

此命令会将提交状态重置为较早的日期,而不会更改任何文件。这将产生这样的效果,即您所更改的所有文件都是已删除的提交,然后您可以在不使用大文件的情况下再次提交它们

手动git重置

——柔软

根本不接触索引文件或工作树(但将头部重置为,就像所有模式一样)。这将使您所有更改的文件“要提交的更改”,正如git status所说的那样


这个悬而未决/被忽略的提交会发生什么?