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

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


当前回答

就我而言,我已经推动回购。哎哟

您可以通过以下操作恢复特定提交,同时将更改保留在本地文件中:

git revert -n <sha>

通过这种方式,我能够保留所需的更改,并取消已经推送的提交。

其他回答

对于使用zsh的用户,您必须使用以下选项:

git reset—软头\^

此处解释:https://github.com/robbyrussell/oh-my-zsh/issues/449

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

转义命令中的^你也可以选择使用HEAD~,这样你就不必每次都逃避它。

是的,您可以在不删除更改的情况下删除提交:

git reset @~

在某些情况下,我只想在第一次提交时撤消对特定文件的更改,以便将它们添加到第二次提交中,并有一个更干净的git日志。

在这种情况下,我要做的是:

git checkout HEAD~1 <path_to_file_to_put_in_different_commit>
git add -u
git commit --amend --no-edit
git checkout HEAD@{1} <path_to_file_to_put_in_different_commit>
git commit -m "This is the new commit"

当然,即使在使用committosplit上的编辑选项进行rebase-i时,这也能很好地工作。

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

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

2020简单方法:

git reset <commit_hash>

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

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

git push -f

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