在我的一个开发分支中,我对代码库做了一些更改。在我能够完成正在开发的功能之前,我必须将当前分支切换到master来演示一些功能。但仅仅使用“git checkout master”就保留了我在开发分支中所做的更改,从而破坏了master中的一些功能。因此,我所做的是在我的开发分支上提交一条提交消息“临时提交”,然后为演示签出主控。
现在,我已经完成了演示并返回到我的开发分支中,我想删除我所做的“临时提交”,同时仍然保留我所作的更改。这可能吗?
在我的一个开发分支中,我对代码库做了一些更改。在我能够完成正在开发的功能之前,我必须将当前分支切换到master来演示一些功能。但仅仅使用“git checkout master”就保留了我在开发分支中所做的更改,从而破坏了master中的一些功能。因此,我所做的是在我的开发分支上提交一条提交消息“临时提交”,然后为演示签出主控。
现在,我已经完成了演示并返回到我的开发分支中,我想删除我所做的“临时提交”,同时仍然保留我所作的更改。这可能吗?
当前回答
您正在查找git reset HEAD^--soft或git reset-HEAD^-mixed。
如文档中所述,重置命令有三种模式:
git reset HEAD^--软
撤消git提交。更改仍然存在于工作树(项目文件夹)+索引(--cached)中
git reset HEAD^--混合
撤消gitcommit+gitadd。工作树中仍存在更改
git reset HEAD^--硬
就像你从未对代码库做过这些更改一样。更改将从工作树中删除。
其他回答
就这么简单:
git reset HEAD^
注意:有些shell将^视为特殊字符(例如,某些Windows shell或启用了globbing的ZSH),因此在这些情况下,您可能必须引用“HEAD^”或使用HEAD~1。
不带--hard或--soft的gitreset会将您的HEAD移动到指定的提交,而不会更改任何文件。HEAD^是指当前提交的(第一个)父提交,在您的情况下是临时提交之前的提交。
请注意,另一个选项是正常运行,然后在下一个提交点运行:
git commit --amend [-m … etc]
它将改为编辑最近的提交,具有与上面相同的效果。
请注意,如果您已经将错误的提交推到了其他人可能已将其删除的位置,则这(几乎与每个git答案一样)可能会导致问题。尽量避免这种情况
您正在查找git reset HEAD^--soft或git reset-HEAD^-mixed。
如文档中所述,重置命令有三种模式:
git reset HEAD^--软
撤消git提交。更改仍然存在于工作树(项目文件夹)+索引(--cached)中
git reset HEAD^--混合
撤消gitcommit+gitadd。工作树中仍存在更改
git reset HEAD^--硬
就像你从未对代码库做过这些更改一样。更改将从工作树中删除。
就我而言,我已经推动回购。哎哟
您可以通过以下操作恢复特定提交,同时将更改保留在本地文件中:
git revert -n <sha>
通过这种方式,我能够保留所需的更改,并取消已经推送的提交。
首先,您可以使用以下命令查看日志-
git reflog
这将显示所有提交,然后找出要撤消的提交以及与之关联的头号,然后输入以下命令
git reset HEAD@{#NumberOfCommitYouWantToUndo}
例如git reset HEAD@{3}
git-resetHEAD@{#}显示重置后的所有未分级更改
使用git2.9(精确到2.9.2.windows.1)git reset HEAD^提示更多信息;不确定此处的预期输入。请参考下面的截图
找到了另一个解决方案git-resetHEAD~#numberOfCommits,我们可以使用它来选择要通过保持更改不变来重置的本地提交数。因此,我们有机会丢弃所有本地提交以及有限数量的本地提交。
请参阅下面显示git reset HEAD~1的屏幕截图: