我可以删除 git commit 但保留更改

在我的一个开发分支中,我对代码库进行了一些更改。在我能够完成正在使用的功能之前,我必须将当前分支切换为 master 来演示一些功能。但是仅使用 “git checkout master” 保留了我在开发分支中所做的更改,因此破坏了 master 中的某些功能。因此,我要做的是使用 “临时提交” 提交消息在开发分支上提交更改,然后为演示结帐母版。

既然我已经完成了演示,然后又可以在开发分支上工作了,那么我想删除我所做的 “临时提交”,同时仍然保留所做的更改。那可能吗?

答案

git reset HEAD^
git commit --amend [-m … etc]
git reset HEAD^
git config --global alias.uncommit 'reset HEAD^'
git rebase -i <ref>
git stash save 'some message'
git stash list
git stash apply stash@{#}
git stash
git checkout <correct_branch>
git stash apply

我想你在找这个

git reset --soft HEAD~1

它撤消最近的提交,同时保留对该提交所做的更改以暂存。

是的,您可以删除提交而不删除更改:git reset @〜

对于使用 zsh 的用户,必须使用以下命令:

git reset --soft HEAD\^

在这里解释: https : //github.com/robbyrussell/oh-my-zsh/issues/449

如果 URL 失效,重要的部分是:

在命令中转义 ^

您也可以使用 HEAD〜,这样就不必每次都转义它了。

您正在寻找git reset HEAD^ --softgit reset HEAD^ --mixed

文档所述,reset 命令有 3 种模式:

git reset HEAD^ --soft

撤消git commit 。更改仍存在于工作树(项目文件夹)+ 索引(- 缓存)中

git reset HEAD^ --mixed

撤消git commit + git add 。工作树中仍然存在更改

git reset HEAD^ --hard

就像您从未对代码库进行这些更改一样。更改从工作树中消失了。

git revert -n <sha>

使用 git 2.9(精确地是 2.9.2.windows.1) git reset HEAD^会提示更多信息;不知道在这里期望输入什么。请参考下面的截图

在此处输入图片说明

找到了其他解决方案git reset HEAD~#numberOfCommits ,我们可以使用它们通过保持更改不变来选择要重置的本地提交数。因此,我们有机会丢弃所有本地提交以及数量有限的本地提交。

请参阅下面的屏幕快照,其中显示了git reset HEAD~1的作用: 在此处输入图片说明

在此处输入图片说明

git rebase -i