Git-如何在错误的本地分支中撤消提交?

时间:2019-03-01 21:42:56

标签: git

我的Git设置使得我可以在本地“功能”分支中工作,并在我工作时将更改提交到该分支。代码准备就绪后,我将合并到本地的“ develop”分支中。然后,将本地“开发”分支中的更改推送到远程“开发”分支。

我对文件进行了一些更改,并提交了这些更改,但没有意识到我在本地的“ develop”分支而不是“ feature”分支。在将“ develop”分支推送到远程“ develop”分支之前,我意识到自己的错误,因此更改仍保留在本地。

如何撤消对本地“开发”分支的提交?我正在使用Tortoise Git,但是如果需要,我仍然可以使用Git命令行。

注意:这不是我第一次提交给功能分支,也不是第一次合并到开发分支。

3 个答案:

答案 0 :(得分:4)

有几种方法可以解决问题。一种方法是在cherry-pick分支上feature提交。然后reset您的develop分支到上一个提交。

  1. git checkout feature
  2. git cherry-pick <commit hash>
  3. git checkout develop
  4. git reset --hard HEAD~1

答案 1 :(得分:1)

如果您忘记为功能创建分支,则应创建一个分支:

git branch feature

然后,您可以将develop重设回原来的位置:

git reset --hard HEAD~

如果您已经有一个feature分支想要移动在develop上意外进行的提交,则可以使用git cherry-pick

git checkout feature
git cherry-pick develop

然后您可以如上所述重置develop。只需确保先检查一下即可:

git checkout develop

答案 2 :(得分:0)

因此,让我们讨论一下如何将那些提交移至功能分支,然后撤消它们。为了便于说明,我们将假定只有错误的提交才在本地进入您的develop分支。

  1. 获取develop上每个错误提交的提交哈希。您可以在gui中执行此操作,也可以结帐develop并在终端中运行git log。将它们复制粘贴到某个位置,以便以后参考。

  2. 检出您的feature分支。现在,您将为在步骤#1中保存的每个提交哈希运行git cherry-pick <commit_hash>。您要按照将它们提交到develop分支上的顺序进行操作。这样会将每个提交重播到您本地的feature分支上。

  3. 在您的develop分支上进行硬重置,以使其恢复到远程版本。假设远程引用为origin/develop,则将执行git reset --hard origin/develop

请注意,还有其他方法可以使用git rebase或使用交互式rebase。对于那些不了解git经验的人来说,这是我想到的最简单的方法。

请注意,如果您担心如果情况无法按预期进行还原,可以利用git tag制作救援标签。