问题背景
有时候,我们拿到需求,没仔细看当前分支是什么,就开始撸代码了。完成了需求或者写到一半发现开发错分支了。
比如此时新需求代码都在master分支上,提交必然是不可能的,所有修改还是要在新建分支上进行,最后测试通过,才能合并到master分支。
如果只是修改很少的代码,可以从master分支拷贝出修改的文件,然后放弃所有修改,再新建分支,最后将拷贝的文件覆盖原来想修改的文件。如果已经修改了很多个文件的代码,再这样修改未免有点奔溃了,不过我们可以用下面的方法解决。
这时最理想的方法,就是将改动暂存在本地,然后基于master分支新建一个开发分支如 new_branch ,然后将改动提交到 new_branch;测试通过后再合并到master。
方法一:
通过以下步骤将 master 分支上的修改代码移到一个新的分支上:
- 确认当前分支为主分支,确认 (master) 前有 * 星号 * 表示当前分支为主分支。
git branch
- 创建一个新分支并切换到新分支,如 new_branch 分支。
git checkout -b new_branch
- 最后,将修改的代码添加到
暂存区
并提交修改的代码 :
git add . //添加到git暂存区
git commit -m "xxxxxx"
git push origin new_branch
如果你需要将其他分支上的修改代码移动到新的分支上,也可以按照上述步骤操作。
方法二:
- 首先,使用以下命令将分支本地修改保存到
git 缓存区
,以备后续使用:
git stash
暂存完毕后执行 git status
会显示不出本地的修改。
- 再拉取当前分支最新代码(如果同事在当前分支有提交的话)
git pull
- 新建并切换到新分支,如new_branch
git checkout -b new_branch
- 接着,将之前暂存本地的修改释放出来应用到 new_branch 分支上:
git stash pop
这时执行 git status
可以看到本地修改又显示出来了。
- 最后,正常提交代码到新分支 new_branch :
git add .
git commit -m "xxxxxx"
git push origin new_branch
注意:git stash 命令最好不要经常用,不然很容易忘记啥时候在隐藏空间存了代码。
延伸:git stash pop/apply
区别
git stash pop //应用一次隐藏的更改并将其从堆栈中删除
git stash apply //应用隐藏的更改后保留它们以供将来使用,不会删除
可参考:
Git 实际操作应用 - 代码写错了分支怎么解决