如何解决提交到错误的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
:
用鼠标右键单击您想要返回的提交。 并根据需要恢复或重置。