我的Git设置使得我可以在本地“功能”分支中工作,并在我工作时将更改提交到该分支。代码准备就绪后,我将合并到本地的“ develop”分支中。然后,将本地“开发”分支中的更改推送到远程“开发”分支。
我对文件进行了一些更改,并提交了这些更改,但没有意识到我在本地的“ develop”分支而不是“ feature”分支。在将“ develop”分支推送到远程“ develop”分支之前,我意识到自己的错误,因此更改仍保留在本地。
如何撤消对本地“开发”分支的提交?我正在使用Tortoise Git,但是如果需要,我仍然可以使用Git命令行。
注意:这不是我第一次提交给功能分支,也不是第一次合并到开发分支。
答案 0 :(得分:4)
有几种方法可以解决问题。一种方法是在cherry-pick
分支上feature
提交。然后reset
您的develop
分支到上一个提交。
git checkout feature
git cherry-pick <commit hash>
git checkout develop
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
分支。
获取develop
上每个错误提交的提交哈希。您可以在gui中执行此操作,也可以结帐develop
并在终端中运行git log
。将它们复制粘贴到某个位置,以便以后参考。
检出您的feature
分支。现在,您将为在步骤#1中保存的每个提交哈希运行git cherry-pick <commit_hash>
。您要按照将它们提交到develop
分支上的顺序进行操作。这样会将每个提交重播到您本地的feature
分支上。
在您的develop
分支上进行硬重置,以使其恢复到远程版本。假设远程引用为origin/develop
,则将执行git reset --hard origin/develop
请注意,还有其他方法可以使用git rebase
或使用交互式rebase。对于那些不了解git经验的人来说,这是我想到的最简单的方法。
请注意,如果您担心如果情况无法按预期进行还原,可以利用git tag
制作救援标签。