Git使用案例整理

大概介绍一下git在实践中的相关操作。

志在成为骨灰级玩家的同学的可以阅读《git权威指南》等相关书籍,书中设计的git的实现原理啥的还是很有意思的,很早之前看过一遍,忘的差不多了。不过git始终是一个工具,也不必过于深究,能在实践中熟练使用即可(一家之言)。

操作示意图

git操作示意图

对于刚开始接触版本控制系统的同学来说,只要能理解git的工作区(Working Directory)、暂存区(Staging/Index)、本地版本库(Local Repository)、远程版本库(Remote Repository)以及分支(branch)就能很好的掌握git的原理及使用。相关的内容可以查阅书籍或文章,譬如[Git的思想和基本工作原理]。(http://www.nowamagic.net/academy/detail/48160210)

单分支协作开发情景

情景: 远程分支上有master、develop等分支,猿A和猿B都基于develop分支开发一个新功能。

#命令清单
#clone 远程版本库到本地
git clone [email protected]:GrimmjowNa/awesome.git(项目地址)

#查看全部分支
git branch -a (a以为all,不加参数为查看本地分支)

#切换到develop分支
git checkout develop

#....疯狂码代码ing。。。。

#查看本地改动,列出改动的文件名及状态(是否被跟踪,改动,删除等)
#这些改动都是在工作区中
git status

#添加改动到暂存区,建议使用gui等可视化工具确认一下自己的改动
git add 
git add files
git add -A

#将暂存区的改动永久保存到本地版本库
#-m是必选项,描述本次提交解决什么问题(吐槽:不要每次都写个"refine")
#--amend可选意思是合并到上一次提交,使用前提是上一次提交是你的提交(自己想为啥子)并且提交解决的是同一个问题
git commit [--amend] -m "message"

#提交之后就可以push到远程了,push之前要先同步一下代码,不如猿A已经在远程进行了提交,要先是本地和远程一直,才能推送。
#git pull -r 相当于git fetch和git rebase
#git fetch就是把远程代码同步到本地
#git rebase简单理解就是把本地改动追加到远程代码上保证提交树与远程一致且没有分支
#rebase实际是放弃本地的提交,重新提交,如果猿A猿B修改了相同的文件可能导致冲突
git pull -r

#通过git status定位冲突的文件进行修改,解决传统后执行add,然后继续rebase
#为什么只需要add呢,rebase是放弃原来的提交,然后按照该提交重新将改动添加到暂存区然后提交。
#出现冲突文件未能全部添加到暂存区,解决冲突后添加至暂存区rebase会继续后续操作
git add file
git rebase --continue

#提交代码到远程仓库
git push origin develop

以上就是多人单分支的开发模式。
其中git pull -r只是一种方案,也可以用以下方案
- git fetch,git rebase origin/develop
- git fetch,git merge origin/develop
- git pull(相当于gitfetch,gitmerge origin/develop)

多分支模式

A和B基于dev切出feat-a和feat-b,开发结束合并到dev

使用merge方式

git checkout dev
git pull -r
git merge feat-a

使用rebase方式

git checkout dev
git pull -r
git checkout feat-a
git pull -r
git rebase dev
git checkout dev
git merge feat-a

git checkout feat-b
git pull -r
git rebase dev
git checkout dev
git merge feat-b

先把git checkout feat-a; git rebase dev 先把feat-a在dev后追加重演,然后在dev上快进指针。

MergeRequest协作开发情景

ps: gitlab

情景描述:猿A和猿B在develop上进行开发,开发被细化为多个task,猿A负责task1:login开发,task2:register开发。开发中猿A为每个task基于develop分支新建分支,完成开发后提交到远程,然后填写merge request向领导发请求合并代码到develop分支。

#命令清单
git clone [email protected]:GrimmjowNa/awesome.git(项目地址)
git checkout develop

#基于当前分支新建分支并切换到新分支
git branch task1
git checkout task1

#疯狂码代码,完成task1,提交代码
git add -A
git commit -m "task1"

#推送代码
#为了后续merge代码没有冲突可以先将develop分支的代码rebase到task1上
git fetch
git rebase origin/develop

#推送代码到远程服务器
git push origin task1

#在gitlab上填写MergeRequest,等待代码merge到develop分支

未解决的问题

如果在task1分支在rebase并push之后又有新的提交,而此时develop分支已经merge过task3的code,task1分支进行rebase后会导致与远程代码不一致?需要使用git push -f

了解其他
  1. git config
  2. git rebase和git merge的区别
  3. git reset [–soft|–hard|–mixed]
  4. 反向提交 git revert
  5. 慎用 git push -f
  6. n条提交记录 git log [–oneline] -n
  7. 操作记录 git reflog
  8. git diff(一般都用可视化工具,所以不常用)
  9. git checkout –file
  10. git tag(领导用的…俺没用过)
  11. git命令别名

暂时就这么多啦,应该够解决大部分问题啦。

猜你喜欢

转载自blog.csdn.net/u010098544/article/details/57083587
今日推荐