在我的一个开发分支中,我对代码库做了一些更改。在我能够完成正在开发的功能之前,我必须将当前分支切换到master来演示一些功能。但仅仅使用“git checkout master”就保留了我在开发分支中所做的更改,从而破坏了master中的一些功能。因此,我所做的是在我的开发分支上提交一条提交消息“临时提交”,然后为演示签出主控。

现在,我已经完成了演示并返回到我的开发分支中,我想删除我所做的“临时提交”,同时仍然保留我所作的更改。这可能吗?


当前回答

2020简单方法:

git reset <commit_hash>

(您要保留的最后一次提交的提交哈希)。

如果推送提交,则可以执行以下操作:

git push -f

您将在本地保留当前未提交的更改

其他回答

使用git2.9(精确到2.9.2.windows.1)git reset HEAD^提示更多信息;不确定此处的预期输入。请参考下面的截图

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

请参阅下面显示git reset HEAD~1的屏幕截图:

如果您想更新提交的历史记录,或者想添加新的提交并删除以前的提交,请使用此代码

此命令将打印最后一个提交散列,例如fa386d8eaa4bde4a4a2912ef96aad6df31f4d4ccgit日志重置上次提交。注意:它不会删除任何更改并保留新的和旧的更改。仅删除最后一条提交消息数字重置629f9dfb47620a1794f5edf816762f8e30668498添加所有更改的文件git添加。提交您的邮件gitcommit-m“Your_new_commit_message_here”强制推送之前已经推送的内容,并使用相同的gitlog命令进行检查git push-f源Your_Branch_Name

就这么简单:

git reset HEAD^

注意:有些shell将^视为特殊字符(例如,某些Windows shell或启用了globbing的ZSH),因此在这些情况下,您可能必须引用“HEAD^”或使用HEAD~1。

不带--hard或--soft的gitreset会将您的HEAD移动到指定的提交,而不会更改任何文件。HEAD^是指当前提交的(第一个)父提交,在您的情况下是临时提交之前的提交。

请注意,另一个选项是正常运行,然后在下一个提交点运行:

git commit --amend [-m … etc]

它将改为编辑最近的提交,具有与上面相同的效果。

请注意,如果您已经将错误的提交推到了其他人可能已将其删除的位置,则这(几乎与每个git答案一样)可能会导致问题。尽量避免这种情况

还有一种方法。

在临时提交的顶部添加提交,然后执行以下操作:

git rebase -i

要将两个提交合并为一个(命令将打开带有显式指令的文本文件,请对其进行编辑)。

我想你在找这个

git reset—软HEAD~1

它撤消最近的提交,同时将该提交中所做的更改保留到登台。