场景一
当正在dev分支开发时,突然有bug需要修改
这时你想创建一个分支issue-101
来修复它,去修bug,但是dev功能才写了一半,不想提交怎么办,这时切分支肯定会提醒修改要提交,能否暂存起来?
git stash命令
提示 Saved working directory and index state WIP on dev: 5ba890f --no-ff 测试
bug 修复完后切换回dev分支,发现没有修改的,查看之前的改动也不在了,这是丢失了吗,该怎么找回呢
stash 藏匿; 隐藏
git stash 将修改隐藏 git stash
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用 git stash apply恢复,git stash apply 恢复当前最顶部的stash,并在stash list中保留该stash id
但是恢复后,stash内容并不删除,你需要用git stash drop
来删除;
git stash pop恢复被藏匿的代码。之后stash区内容也会被清掉
stash ID
是git stash list 获取到的key值
输入git stash list ,得到以下结果 ,其中 stash@{0}就是id
stash@{0}: WIP on dev: 5ba890f --no-ff 测试
git cherry-pick
Git专门提供了一个cherry-pick
命令,让我们能复制一个特定的提交到当前分支,意思应该是一次提交
在master分支上修复了bug后,我们要想一想,dev分支是早期从master分支分出来的,所以,这个bug其实在当前dev分支上也存在。如果想修改dev,并不是把整个master分支merge过来。
以前笨方法:在dev分支再手动修改一次并提交,逻辑是,把修改bug那一次提交复制到dev就好了
同样的bug,要在dev上修复,我们只需要把4c805e2 fix bug 101
这个提交所做的修改“复制”到dev分支。注意:我们只想复制4c805e2 fix bug 101
这个提交所做的修改,并不是把整个master分支merge过来。
使用 git cherry-pick commitID 命令
commitID 是从master 上找的,提交 bug 007,产生的cmmit id
git cherry-pick 27c80b9
cherry-pick 会将之前的bug 007提交复制到dev ,这次 提交产生了一个新的commitID,但并不会把master上的commitID复制过来
小结
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场;
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>
命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
参考 廖雪峰Git教程(2020)