Git 切换分支,将当前分支的修改带到下个分支
Git 切换分支,将当前分支的修改带到下个分支
使用刚初始化的 git
项目进行开发时,切换分支的时候发现 dev
分支的修改带到了 master
分支。
1、出现原因
原因在于 dev
分支拥有与 master
相同的 commit
历史,git
此时会带着当前分支的修改到下个分支中,通过 git log
可查看 commit
历史。
1.1、例子
我现在本地拥有 dev
和master
分支,修改了 dev
分支上的 **application.properties **文件,此时git checkout master
切换到master
分支,有以下提示
# 切换到master,提示application.properties已经修改
D:\WebTeam\MyBatis_Plus\mybatis_plus>git checkout master
Switched to branch 'master'
M src/main/resources/application.properties
Your branch is up to date with 'origin/master'.
此时在 master
分支可以看到已经修改了的 application.properties 文件。
执行 git log
可以看到 dev
分支与 master
相同的commit
历史,当然只有在初始化项目时 dev
分支才会拥有与master
一样的 commit
历史,后面一般在dev
分支进行 commit
,再合并到master
。
2、Please commit your changes or stash them before you switch branches.
当在dev
分支做了修改,而且dev
分支与master
分支的commit
历史不一致,想切回master
分支时就会有 Please commit your changes or stash them before you switch branches. 提示,翻译过来的意思是“在你切换分支之前请先提交你的修改或者暂存他们”。
因此想要切换分支就需要用到git commit
命令或者git stash
命令。
2.1、不应用当前分支的修改,单纯地切换分支
很多时候我们并不想提交,只是想单纯的切换分支,不想把修改带到切换的分支,那就使用git stash
保存工作区和暂存区的修改到堆栈中,就可以切换到master
分支了,当切回dev
分支时再执行git stash pop
取回原先的修改就可以了。执行命令如下;
# 保存dev分支的修改到堆栈中
$ git stash
# 切换master分支
$ git checkout master
# 切回dev分支
$ git checkout dev
# 获取堆栈列表
$ git stash list
# 对比本地与堆栈条目差异
$ git stash show stash@{0}
# 对比本地与堆栈条目详细代码差异
$ git stash show stash@{0} -p
# 取回堆栈最新的修改
$ git stash
2.2、应用当前分支的修改到切换的分支中
由于 git stash
的堆栈是所有分支共享的,所以 master
分支也可以取得dev
分支的修改,过程非常的简单。
# 保存dev分支的修改到堆栈中
$ git stash
# 切换master分支
$ git checkout master
# 取回堆栈最新的修改
$ git stash pop
# 或者取回堆栈指定的修改
$ git stash apply stash@{0}
参考博客:当前分支的修改带到下个分支中