使用Git管理项目总结
导语:
使用git已经一段时间了,总结一下我的理解关于使用git进行团队协作开发的流程。首先master分支作为主分支应该承担版本发布的责任。开发任务应该在develop分支上。不论当前分支是从哪个分支分离开来,都需要合并到那个分支上。根据需求的不同以及开发人员的指派,应该创建一系列feature-分支,一旦开发完毕后,进行代码的review,确认无误后合并分支到develop分支上,之后删除相应的feature-分支。在进行版本的发布前,需要从develop分支分离并创建对应的预发布分支,进行当前版本的测试,完成后,需要合并进develop分支和master分支,之后切换分支到master分支,生成版本节点标签并删除对应预发布分支,进行版本的发布。如果遇到bug问题,需要从master分支分离出修复bug分支,修复完成后合并进develop和master分支,之后切换分支到master分支,生成节点标签并删除对应bug分支。
一般的git命令已经用的很多了,今天记录几个很重要但是我自己在日常工作中很少使用的几个命令。
git stash
正在feature分支开发,master分支报了一个bug错误,此时需要即时修复bug,但是开发还没有完成,此时提交不太友好。Git提供的stash功能正好适用这个场景。可以把当前工作储存起来,处理完事情后继续工作。
1 | $ git stash // order code |
此时git status查看工作区是干净的。此时可以创建临时分支处理bug。处理完bug后切换回feature-分支继续开发。
1 | $ git stash list // order code |
工作现场存在,现在需要恢复现场。两个办法:
git stash apply && git stash drop // 前者恢复现场不删除stash内容,后者为补充删除stash内容
git stash pop // 恢复现场同时删除stash内容
如果多次stash的情况下,可以git stash list查看,然后恢复指定的stash
1 | git stash apply stash@{0} // 括号内为指定stash内容 |
–no-ff
这个参数的意思是保留原分支记录,默认情况下,执行fast-forward merge,直接将master分支指向develop分支
1 | git merge --no-ff develop // 把develop合并进master分支 |
git diff
比较两次修改的差异
工作区 VS 暂存区
1 | $ git diff <filename> |
暂存区 VS Git仓库
1 | $ git diff --cached <filename> |
工作目录 VS Git仓库
1 | $ git diff <commit> <filename> |
Git仓库 VS Git仓库
1 | $ git diff <commit> <commit> // git仓库任意两次commit的差别 |
扩展:
以上命令可以不指定
以上命令涉及git仓库对比的,均可指定commit版本
HEAD 最近一次commit
HEAD^ 上次提交
HEAD~100 上100次提交
每次提交产生的哈希值
git rebase
将某个分支上的所有提交记录移植到另一个分支上,清除不必要的提交记录
永远不要rebase一个已经分享的分支
一图以意之
以下是一个例子讲解rebase的作用
切换到issue3分支后,对master执行rebase,解决冲突
1 | $ git checkout issue3 |
冲突解决后不需要commit命令进行提交,而是执行rebase命令的continue选项或着abort选项
1 | $ git add . |
master分支的issue3分支可以fast-forward了。切换到master分支执行合并
1 | $ git checkout master |
rebase的内容与merge的效果是一样的,但是历史记录会简洁