git切换分支保存修改的代码的方法
最近在一个原有的项目上做一次非常大的改版,底层的数据库做了很大的变化,跟现在的版本无法兼容。现在的工作除了开发最新的版本之外还要对原来的版本做例行的维护,修修补补。于是有了在两个分支之间游走切换的问题,最新改版的代码在分支new上,旧版本的代码在分支old上,我在new上开发了一半,忽然有人给了我一个改进的需求,于是我要切换回old去修改代码。在这个场景下,我摸索了三种方法:
及时commit代码
在new分支上把已经开发完成的部分代码commit掉,不push,然后切换到old分支修改代码,做完了commit,所有分支互不影响,这是一个理想的方法。
使用git stash
有时候写了一半的JAVA代码,都还不能编译通过的,就被叫去改另一个分支的bug了。
在new分支上的时候在命令行输入:
git stash
或者
git stash save “修改的信息"
这样以后你的代码就回到自己上一个commit了,直接 git stash
的话 git stash
的栈会直接给你一个hash值作为版本的说明,如果用 git stash save “修改的信息”
,git stash
的栈会把你填写的“修改的信息”作为版本的说明。
接下来你回到old分支修改代码完成,你又再回到new分支,输入:
git stash pop
或者
git stash list
git stash apply stash@{0}
就可以回到保存的版本了。git stash pop
的作用是将 git stash
栈中最后一个版本取出来,git stash apply stash@{0}
的作用是可以指定栈中的一个版本,通过 git stash list
可以看到所有的版本信息:
stash@{0}: On order-master-bugfix: 22222
stash@{1}: On order-master-bugfix: 22222
然后你可以选择一个你需要的版本执行:
git stash apply stash@{0}
这时候你搁置的代码就回来了。
这是一个非常常用的场景,我正在一个分支上修改功能,然后遇到一个bug需要解决,我得切换到其他分支来修改这个bug,但是目前的功能还在开发阶段,还不成熟,还不想执行 add
和 commit
,执行这两个后就会在历史中有记录,并不想这样做,于是就有了git stash
功能,把我当前的修改暂时保存起来,然后回来的时候再取出来继续开发功能.
git stash是针对整个git工程来进行保存的,也就是说区分不了 branch
.比如我在a分支 git stash save "sss"
暂存了一个修改,那么我切换到b分支,我使用 git stash pop
就能把在a分支保存的"sss"这个修改同步到了b分支上.所以当我们需要在不同的分支上取出不同的分支上保存的修改,那么就用到了 git stash list
,这个命令可以把在所有分支上暂存的信息显示出来,然后我们通过 git stash apply stash@{0}
来选择恢复哪个暂存, stash@{0}
这个会在list中列出来.
而我们使用 Android studio
就太方便了.
在当前工程的任何一个文件中,点击右键, 选择git--> 选择repository ---> 里面会列出stash changes和unstash changes命令
,一个是保存修改的命令,一个是恢复修改的命令.
stash changes
会让我们给要保存的内容输入一个 message
,这个和 git stash save "xxx"
是一样的
而 unstash changes
会列表我们之前保存过的list
可以很方便的恢复我们之前的保存的内容.