bug分支
情境:当你在开发的过程中突然要修复一个被提出的bug,但是现在你当前分支上的工作还没有提交,但是工作还没完成,没法提交,而又急于修改这个bug
方法:Git提供了一个stash功能,命令:git stash
,可以把当前工作现场(当前分支的工作)“储藏”起来,等以后恢复现场后继续工作。。 这样工作区就是干净的了
接着,首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支,在这个临时分支上修复bug,修复完成提交后切换到master分支,并完成合并,最后删除临时分支。。
最后还是要切换到当初工作的分支上去,但是因为当初git stash
隐藏了工作,现在这个分支下的工作区是干净的,当初的工作现场到哪里了,可以用命令:git stash list
查看之前的工作现场,下面就是要恢复工作现场,用命令:git stash apply
,但是恢复后,stash内容并不删除,你需要用git stash drop
来删除;
还有一种方式就是git stash pop
可以直接代替git stash list
和git stash apply
,表示恢复的同时把stash内容也删除了。
此时再用git stash list
查看,就看不到任何stash内容了。
注意:也可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:git stash apply [email protected]{0}
所以,修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
删除未合并的分支
场景:当创建一个分支,并在这个分支上修改了一部分东西已经提交,但是现在又不要修改这部分东西了,并且要删除这个分支,但是如果直接用命令git branch -d name
将会删除失败,提示分支还没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用命令git branch -D name
方法:强行删除,git branch -D name
,,OK,删除成功。
所以,如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。
多人协作的工作模式
场景:假设远程仓库为github上的一个仓库,默认名称是origin(远程仓库的别名),而对这个仓库工作的人有很多人,合并提交如果不按和一定规则模式来,就有可能发生冲突失败
方法:要推送的时候,使用git remote
来查看远程库的信息,或者,用git remote -v
显示更详细的信息:
上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
推送分支:
git push origin master
master为要指定推送的本地分支,origin为远程库对应的远程分支,推送也要遵从一定的规则:
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
如果github上的远程库没有分支feature1,可以直接git push origin feature1
把本地上的分支feature1推送到远程仓库。
使用命令:git branch -a
查看远程仓库的分支:
抓取分支:
情景一:现在github远程仓库上有一个分支dev,但是本地上没有,需要把远程origin的dev分支到本地
方法:使用命令:git checkout -b dev origin/dev
将远程仓库的dev分支抓取到本地上
情景二:对同一个分支dev,你在本地上做了修改,还未提交,而此时其他人也对你同样的文件作了修改,并且已经提交到远程仓库dev分支上了,此时你再推送就会推送失败,显示冲突,再用git pull
把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送,发现git pull
也失败了。
方法:git pull
的 原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:
$ git branch --set-upstream dev origin/dev
Branch dev set up to track remote branch dev from origin.
然后再git pull
,成功!
注意:以后修改推送时,一定要先pull,再push
删除远程分支
情景:现在github上gitTest仓库有远程分支dev,现在要删除它
使用命令:git push origin :dev
再看github上,已经没有dev分支了: