如何解决提交到错误的Git分支?

我只是对错误的分支做了一个很好的承诺。 我如何撤消我的主分支中的最后一个提交,然后采取相同的变化,并把他们到我的升级分支?

如果您尚未推送更改,也可以执行软重置:

git reset --soft HEAD^ 

这将恢复提交,但将提交的更改放回您的索引。 假设分支相对来说是相对最新的,那么git会让你在另一个分支做结账,这样你就可以简单地提交:

 git checkout branch git commit 

缺点是你需要重新input你的提交信息。

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

要回滚一个提交(请确保您记下下一步的提交哈希):

 git reset --hard HEAD^ 

把这个提交拉到不同的分支上:

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

如果您有修改或未修改的更改

另外请注意, git reset --hard杀死所有未经检查和修改的更改 ,所以如果您有这些更改可能会更喜欢:

 git reset HEAD^ git checkout . 

4年后的话题,但这可能会有所帮助的人。

如果在提交之前忘了创build一个新的分支,并且提交了所有的主分支,无论您进行了多less次提交,以下方法都会更简单:

 git stash # skip if all changes are committed git branch my_feature git reset --hard origin/master git checkout my_feature git stash pop # skip if all changes were committed 

现在,您的主分支等于origin/master ,所有新的提交都在my_feature 。 请注意, my_feature是本地分支,不是远程分支。

如果您已经推动了您的更改,则需要在重新设置HEAD后强制执行下一步操作。

 git reset --hard HEAD^ git merge COMMIT_SHA1 git push --force 

警告:硬复位将撤销工作副本中的任何未提交的修改,而强制推送将使用本地分支的当前状态完全覆盖远程分支的状态。

以防万一,在Windows(使用Windows命令行,而不是Bash),它实际上是四个^^^^而不是一个,所以它

 git reset --hard HEAD^^^^ 

我最近也做了同样的事情,在那里我不小心对主人做出了改变,当时我应该承诺到其他分支。 但我什么也没有推。

如果你只是犯了错误的分支,而且没有改变任何东西,并没有推到回购,那么你可以做到以下几点:

 // rewind master to point to the commit just before your most recent commit. // this takes all changes in your most recent commit, and turns them into unstaged changes. git reset HEAD~1 // temporarily save your unstaged changes as a commit that's not attached to any branch using git stash // all temporary commits created with git stash are put into a stack of temporary commits. git stash // create other-branch (if the other branch doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // take the temporary commit you created, and apply all of those changes to the new branch. //This also deletes the temporary commit from the stack of temp commits. git stash pop // add the changes you want with git add... // re-commit your changes onto other-branch git commit -m "some message..." 

注意:在上面的例子中,我正在倒带1提交git reset HEAD〜1。 但是如果你想倒回n提交,那么你可以做git reset HEAD〜n。

另外,如果你最终犯了错误的分支,并且在意识到你提交了错误的分支之前写了更多的代码,那么你可以使用git来保存你正在进行的工作:

 // save the not-ready-to-commit work you're in the middle of git stash // rewind n commits git reset HEAD~n // stash the committed changes as a single temp commit onto the stack. git stash // create other-branch (if it doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // apply all the committed changes to the new branch git stash pop // add the changes you want with git add... // re-commit your changes onto the new branch as a single commit. git commit -m "some message..." // pop the changes you were in the middle of and continue coding git stash pop 

注:我用这个网站作为参考https://www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/

所以,如果你的情况是你已经承诺master但意味着提交到another-branch (可能或不可能已经存在),但你还没有推动,这是很容易解决。

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

现在你所有的承诺将在another-branch

来自以下来源的爱: http : //haacked.com/archive/2015/06/29/git-migrate/

如果您希望将更改应用到的分支已经存在(例如,分支开发 ),请按照下面的fotanus提供的说明进行操作,然后:

 git checkout develop git rebase develop my_feature # applies changes to correct branch git checkout develop # 'cuz rebasing will leave you on my_feature git merge develop my_feature # will be a fast-forward git branch -d my_feature 

显然你可以使用tempbranch或任何其他分支名称,而不是my_feature,如果你想。

此外,如果适用,则延迟隐藏popup(应用),直到在目标分支合并之后。

如果遇到此问题,并且拥有Visual Studio,则可以执行以下操作:

右键单击您的分支并selectView History

在这里输入图像说明

用鼠标右键单击您想要返回的提交。 并根据需要恢复或重置。

在这里输入图像说明