0%

git新的指令

使用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
2
$ git stash    // order code
Saved working directory and index state WIP on feature-**: 4966d2d bingo

此时git status查看工作区是干净的。此时可以创建临时分支处理bug。处理完bug后切换回feature-分支继续开发。

1
2
$ git stash list // order code
stash@{0}: WIP on feature-**: 4966d2d bingo

工作现场存在,现在需要恢复现场。两个办法:

  • 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分支

fast-forward

--no-ff

git diff

比较两次修改的差异

工作区 VS 暂存区

1
2
3
$ git diff <filename>  

$ git diff <branch> <filename> // 和另一分支的区别

暂存区 VS Git仓库

1
2
3
$ git diff --cached <filename>  

$ git diff --cached <commit> <filename> // 和指定commit的区别

工作目录 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一个已经分享的分支

一图以意之

0

以下是一个例子讲解rebase的作用

1

切换到issue3分支后,对master执行rebase,解决冲突

1
2
$ git checkout issue3
$ git rebase master

冲突解决后不需要commit命令进行提交,而是执行rebase命令的continue选项或着abort选项

1
2
$ git add .
$ git rebase --continue / --abort

2

master分支的issue3分支可以fast-forward了。切换到master分支执行合并

1
2
$ git checkout master
$ git merge issue3

rebase的内容与merge的效果是一样的,但是历史记录会简洁

3