在我的一个开发分支中,我对代码库做了一些更改。在我能够完成正在开发的功能之前,我必须将当前分支切换到master来演示一些功能。但仅仅使用“git checkout master”就保留了我在开发分支中所做的更改,从而破坏了master中的一些功能。因此,我所做的是在我的开发分支上提交一条提交消息“临时提交”,然后为演示签出主控。
现在,我已经完成了演示并返回到我的开发分支中,我想删除我所做的“临时提交”,同时仍然保留我所作的更改。这可能吗?
在我的一个开发分支中,我对代码库做了一些更改。在我能够完成正在开发的功能之前,我必须将当前分支切换到master来演示一些功能。但仅仅使用“git checkout master”就保留了我在开发分支中所做的更改,从而破坏了master中的一些功能。因此,我所做的是在我的开发分支上提交一条提交消息“临时提交”,然后为演示签出主控。
现在,我已经完成了演示并返回到我的开发分支中,我想删除我所做的“临时提交”,同时仍然保留我所作的更改。这可能吗?
当前回答
在某些情况下,我只想在第一次提交时撤消对特定文件的更改,以便将它们添加到第二次提交中,并有一个更干净的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时,这也能很好地工作。
其他回答
使用git2.9(精确到2.9.2.windows.1)git reset HEAD^提示更多信息;不确定此处的预期输入。请参考下面的截图
找到了另一个解决方案git-resetHEAD~#numberOfCommits,我们可以使用它来选择要通过保持更改不变来重置的本地提交数。因此,我们有机会丢弃所有本地提交以及有限数量的本地提交。
请参阅下面显示git reset HEAD~1的屏幕截图:
对于使用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时,这也能很好地工作。
我想你在找这个
git reset—软HEAD~1
它撤消最近的提交,同时将该提交中所做的更改保留到登台。