我刚刚向错误的分支做出了完美的承诺。 我如何撤消在我的主分支中的最后一次提交,然后采取这些相同的更改,并将它们放入我的升级分支?


当前回答

因此,如果你的场景是你已经提交给master,但打算提交给另一个分支(可能不存在,也可能不存在),但你还没有推送,这很容易修复。

// if your branch doesn't exist, then add the -b argument 
git checkout -b another-branch
git branch --force master origin/master

现在你对master的所有提交都将在另一个分支上。

来自:http://haacked.com/archive/2015/06/29/git-migrate/

其他回答

保留更改并取消提交 简单的解决方案是运行该命令。

git reset HEAD^

这将取消提交代码,同时保留您的更改

如果你有一个干净的(未修改的)工作副本

回滚一次提交(确保你注意到了下一步的提交散列):

git reset --hard HEAD^

将该提交拉到不同的分支:

git checkout other-branch
git cherry-pick COMMIT-HASH

如果您已修改或未跟踪更改

还需要注意的是,git reset -hard会杀死你可能拥有的任何未跟踪和修改的更改,所以如果你有这些更改,你可能更喜欢:

git reset HEAD^
git checkout .

如果你遇到这个问题,并且你有Visual Studio,你可以做以下事情:

右键单击分支并选择View History:

右键单击要返回的commit。并根据需要恢复或重置。

如果你还没有推送你的更改,你也可以做一个软重置:

git reset --soft HEAD^

这将恢复提交,但将提交的更改放回索引中。假设分支之间是相对最新的,git会让你签入另一个分支,然后你可以简单地提交:

git checkout branch
git commit -c ORIG_HEAD

-c ORIG_HEAD部分对于不再输入提交消息很有用。

对我来说,这个问题的解决方法是恢复我之前推送的提交,然后将该提交选择到另一个分支。

git checkout branch_that_had_the_commit_originally
git revert COMMIT-HASH
git checkout branch_that_was_supposed_to_have_the_commit
git cherry pick COMMIT-HASH

您可以使用git log来找到正确的散列,并且您可以随时推送这些更改!