删除未推送的 git 提交,但保留所有本地工作
Delete unpushed git commits, but keep all local work
我的本地目录中有一些大文件,包含在我认为阻止我的 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'
至少,我相当确定是文件大小导致推送失败。我只想删除提交的记录,这样我就可以返回并为这些文件添加一个。git忽略,再次提交并推送。
A 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
是否可以删除提交,同时保留我的工作目录中的所有更改?我正在努力寻找一个似乎不涉及将我的存储库重置为 master 较早提交的答案(我想保留我最近的所有本地工作!)。任何建议将不胜感激。
运行:
git reset origin/master
这将基础提交移回 origin/master,但保留工作树原样。从这一点开始,您可以添加 .gitignore
并进行新的提交。
该提交仍将存在于您的本地存储库中,但不会成为您新提交的祖先,因此在您进行推送时不会传输。
您可以使用 git reset --soft <commit id>
来达到这个目的。要快速返回 3 次提交,您可以使用 HEAD^3
代替提交 ID。
此命令会将提交状态重置为更早的日期,而不会更改您的任何文件。这将产生这样的效果,即您所做更改的所有文件都是已更改的已删除提交,然后您可以在没有大文件的情况下再次提交它们。
来自man git-reset
:
--soft
Does not touch the index file or the working tree at all (but resets the head to <commit>, just like all modes do). This leaves all your changed files "Changes to be committed", as git status would put it.
我的本地目录中有一些大文件,包含在我认为阻止我的 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'
至少,我相当确定是文件大小导致推送失败。我只想删除提交的记录,这样我就可以返回并为这些文件添加一个。git忽略,再次提交并推送。
A 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
是否可以删除提交,同时保留我的工作目录中的所有更改?我正在努力寻找一个似乎不涉及将我的存储库重置为 master 较早提交的答案(我想保留我最近的所有本地工作!)。任何建议将不胜感激。
运行:
git reset origin/master
这将基础提交移回 origin/master,但保留工作树原样。从这一点开始,您可以添加 .gitignore
并进行新的提交。
该提交仍将存在于您的本地存储库中,但不会成为您新提交的祖先,因此在您进行推送时不会传输。
您可以使用 git reset --soft <commit id>
来达到这个目的。要快速返回 3 次提交,您可以使用 HEAD^3
代替提交 ID。
此命令会将提交状态重置为更早的日期,而不会更改您的任何文件。这将产生这样的效果,即您所做更改的所有文件都是已更改的已删除提交,然后您可以在没有大文件的情况下再次提交它们。
来自man git-reset
:
--soft
Does not touch the index file or the working tree at all (but resets the head to <commit>, just like all modes do). This leaves all your changed files "Changes to be committed", as git status would put it.