git内容存档和跳跃分支版本合并
1. git内容存档git stash
在开发的过程中,往往会遇到各种各样的突发情况,这个时候需要将当前手头的任务线"存档",转去处理紧集的事情,回来之后再继续,有点类似于堆栈的压栈和出栈的过程,事实上也就是如此。
比如当前我正在编辑hello.py
文件,当前的状态,我正在修改hello.py
文件
但是此时有个任务派给我需要我去bugFix
分支修复某个bug,因为我在hello.py
的任务还没有完成,所以也就没办法将当前内容commit
到版本库中,我尝试直接switch
到bugFix
分支
切换过程没有问题,但是当我使用git status
查看当前版本状态,得到如下结果:
?!为什么我在dev
分支下面的修改被带到bugFix
分支了?
这是因为当前的开发工作在工作区,这个区域是所有分支都能访问的,你只有把这些工作内容commit
到了某个分支,所做的修改才会只属于那个分支。
于是这样行不通,我不能把这些开发的内容和修复bug的内容混杂在一起,于是我们需要存档,首先切换回我们的开发分支,然后将工作区的修改内容存档,然后再切换到bugFix
分支进行bug修复:
从上图可以看到,dev
分支的修改内容被存档了,切换到bugFix
分支后,没有把那些东西附带过来,于是我们可以在完成bug修复之后,切换回dev
分支继续开发,使用git stash pop
命令将之前的存档内容调出来:
从上图可以看到,调档之后恢复到了我们离开的时候的开发进度,于是我们可以继续之前的工作。
可以使用git stash list
查看当前所有的存档,如果有多个存档,则需要使用git stash apply stash@{ID}
进行指定存档版本的恢复。
2. 跳跃分支版本合并cherry-pick
如上所述,如果我们修复的bug在当前的分支里面也有的话,我们是不是也需要将当前分支的bug也要修复一次?一种想法就是把bugFix
分支修改的内容copy到当前分支,事实上,Git专门提供了一个cherry-pick命令,可以复制一个特定的提交到当前分支,用法如下:
git cherry-pick ID
其中ID
是版本号,也就是每次commit
时都会生成的一串数字,可以使用它找到对应的唯一一次提交。
这样就可以将bufFix
分支所做的修改也同样提交到当前分支。
细心的同学可能会发现,第一幅图像中使用了一个命令和参数进行偷懒:
git commit -am "something"
其实这个命令就是下面两个命令的结合版,可以省点事。
git add xxx
git commit -m "something"