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

4

我在本地目录中有一些巨大的文件,这些文件已经包含在提交中,我认为这些文件正在阻止我的git push继续进行:

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个回答

12

运行:

git reset origin/master 

这将把基础提交移回到 origin/master,但保留工作树的当前状态。从这个点开始,您可以添加 .gitignore 并进行新的提交。

该提交仍将存在于您的本地仓库中,但不会成为新提交的祖先,因此在执行推送操作时不会传输它。


这些悬空/被忽略的提交会发生什么? - KcFnMi

3
你可以使用git reset --soft <commit id>来达到这个目的。如果想要快速回退3个提交,可以将HEAD^3替换为提交id。
此命令将重置提交状态至早期日期,而不更改任何文件。这将导致你所更改的所有文件都被视为已更改,并且你可以在不包含大文件的情况下重新提交它们。
man git-reset得知: --soft 完全不影响索引文件或工作树(但像所有模式一样,将head重置为<commit>)。这使得所有更改文件都变成了“待提交的更改”,就像git状态所述的那样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接