git 提交错分支怎么办

工作一忙,难免会出错,比如写了半天代码,忽然发现分支不对,这时该怎么办?

1. 还没有提交代码

1.1 光顾着写代码了,忘了创建自己的分支

一时疏忽直接在 master 分支上写的代码,master 的代码可能还不是最新。这种情况下我们可以先把自己的代码暂存起来,然后把 master 分支更新到最新,再创建并切换到自己的分支,最后把暂存的代码恢复回来。具体步骤如下:

查看当前状态

1
git status .

修改已经 add 到暂存区

当前状态

暂存代码

1
git stash

将当前存储到栈中,等下切完分支再取出来

保存修改

把 master 分支更新到最新

1
2
git fetch
git merge origin/master

这一步是将 master 分支更新到最新的提交记录,然后在此基础上创建新的分支

创建并切换到自己的分支

直接创建新的分支并切换过去

1
git checkout -b "分支名"

切换分支

如果不习惯这样操作,也可以分成两步操作

1
2
git branch "分支名"
git checkout "分支名"

把暂存的代码恢复回来

1
git stash pop

执行该命令将代码从栈里取出来

取出代码

后续处理

代码已经恢复过来,可以直接 commit 提交了

提交代码

1.2 已经创建了分支

这种情况下直接把分支切过去就可以了

1
git checkout "分支名"

2. 代码已经commit

不要紧,代码还在本地仓库,先把它撤回来

1
git reset HEAD^

这样就把上一次的提交恢复为未提交的状态了,剩下的操作就可以参考第一种情况了

3. 代码已经push到远程仓库

什么?竟然提交到远程仓库了 Orz,master 分支应该有写保护才对。既然已经提交了,那么先看下有没有影响。

  • 如果确认没什么影响,提交就提交吧。。

  • 一般情况下不应该这样提交,可以把上一次的提交内容从 master 撤回。

不过这次不能像刚才那样直接撤销了,git 只能往上面加东西,不能删历史的提交(当然也可以操作历史提交log,不过不建议),因为别人有可能已经将你刚提交的代码同步到本地了。

别担心,我们可以把刚才提交的修改反向提交下,将上一次的修改 revert 下再提交上去。

1
git revert HEAD

执行这条命令后,本地会多一次 commit 记录,其内容是将上次的修改反向提交一次。比如上一次的提交是加了一行记录,那么这次就是将增加的那一行记录删除。

检查下看有没问题,没有问题就可以提交到远程了

1
git push origin master

这样修改内容已经撤销,不过提交记录还是在的。

一般不建议直接提交到 master 分支,所以每次代码push前尽量看下操作的分支对不对