声明:这是个人的喜好习惯和经验,目的是职业新人了解最少的命令,最高效的管理代码。本文不涉及git的高级操作假设是在一个大公司里面工作,一个代码库里,有master,A,B,C......等远端分支。首先会通过命令获取到代码到本地,假设下载下来当前分支是master。
1. 在master分支开发代码并提交
写代码前和合代码时都要对代码进行git pull操作更新。中间写代码时发现别人合了代码,最好也更新一下,不让等自己代码调测完成合代码时发现别人的改动波及自己的功能,那就得重改重测了。
git pull代码冲突的时才需要做特殊处理,这时候代码是pull不下来的,就先git stash -u把自己代码全部暂存起来(建议只在更新代码时用git stash,正因为stash很方便,所以滥用的话stash里面会有很多你不认识的代码,我平时可能5分钟就忘了当时stash的是什么代码),这时候git pull是不会冲突的,代码更新到最新了,然后git stash pop,再慢慢解决冲突。
因为这时候冲突的代码有两份夹杂在你的代码编辑器里,冲突少的时候可以很方便的解决,但是有时候冲突非常多,夹杂的两份代码让你根本分不清楚。这种情况就把当前代码git reset --hard [pull前的代码id]。这时候stash里面因为冲突并没有pop出来,git帮你保留了一份副本,这时候再重新pop出来,再用最传统的用比对工具合入代码吧。
如果冲突不多的话,就直接在代码编辑器里面把代码改成自己想要的代码,然后git add -A,git commit 就可以合入代码了。
2. 切换分支代码开发
2.1 保存当前分支
git stash -u的方法是很方便的,但前面我说了最好不要用。正确的姿势是git add -A,git commit -m,不要把代码推送,只是暂时commit起来,代码就肯定不会丢了。(注意:养成切换分支的时候,本地一定是干净的,git status没有修改的文件)
2.2 切换分支开发
2.3 回到原分支取代码
切回原分支后,git reset [之前暂存的commitid的前一个id],就能得到之前的代码了,然后就继续开发代码就好了。
3. git cherry-pick [commitid]
很好用的命令,必学。
4.其他的好习惯的点
● 每次用完stash,要保证stash是清空的,否则下次你看stash的时候几乎都会忘了之前的stash是什么内容,删也不敢删。暂存代码就用commit就好了,commit带信息。虽然stash的时候也可以带附加信息,但是commit是在和当前分支对应的。stash的空间却是所有分支共用的。
● 分支时常做一下检查,没用的分支要清理。特别是临时分支。
● 做一个大需求的时候,可能周期比较长,代码变动可能包含(重构,优化,bug解决,新接口开发,工具辅助函数,第三方库代码)等,意思就是一些无害合入且基本已经固定需要这样修改的了,可以先合入。这样你在开发代码的时候就不至于看到一大片的改动,你关心检查的地方就会变少,因为你已经把一些肯定正确的代码合上去了,就少花了一部分精力在检查这部分代码上。另外还有一些代码优化,小重构等,尽早合上去,否则到时候可能会有很多冲突。即小步迭代。这类似一个功能函数只做一件事,不要一次代码合入里面做了太多的事情,到时候代码在哪次合入的都分不清楚,就失去了commit message的意义。
● 新建的分支名,最好有一套自己的命名规则。临时分支就加下temp,提醒自己记得把它处理掉,有的人创建分支时就很随意,随便取个名字。对自己要求严格些,会产生意想不到的效率。
● 有的人习惯一天写完代码就commit一次,到合入代码时就有多次commit记录。不要这样做,commit要是有意义的一个里程碑,而不是无意义的时间轴记录。比如完成了接口编写可以commit一次,假如没什么特别的意义,第二天来的时候,最好是git reset到上一个id,继续开发代码。