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

时间:2016-01-12 11:51:31

标签: 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.
error: pack-objects died of signal 13
error: failed to push some refs to 'myrepo'

至少,我很确定文件的大小导致推送失败。我只想删除提交的记录,所以我可以返回并为这些文件添加.gitignore,提交并再次推送。

git status给出:

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

可以删除提交,同时保留我工作目录中的所有更改吗?我很难找到一个似乎没有涉及将我的存储库重置为主服务器早期提交的答案(我想保留我最近的本地工作!)。任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:4)

执行命令

git reset origin/master 

这会将基础提交移回origin / master,但保持工作树不变。从这一点开始,您可以添加.gitignore并进行新的提交。

提交仍然存在于您的本地仓库中,但不会是您新提交的祖先,因此在您执行推送时不会传输。

答案 1 :(得分:2)

您可以将git reset --soft <commit id>用于此目的。要快速恢复3次提交,您可以使用HEAD^3代替提交ID。

此命令会将提交状态重置为较早的日期,而不会更改任何文件。这将导致您更改的所有文件都被更改为已删除的提交,然后您可以在没有大文件的情况下再次提交它们。

来自man git-reset

  

<强> - 软

     

根本不触摸索引文件或工作树(但将头重置为&lt; commit&gt;,就像所有模式一样)。这将保留所有已更改的文件“要提交的更改”,因为git status会将其设置为。