Git学习第四天
git远程操作、远程协作模型、git远程分支的最佳实践
git远程操作的基本命令
1.将本地仓库推送到远程
git remote add origin http://github.com/aaa/bbb.git
git push -u origin master
#将本地master分支与远程做关联,下次直接git push就能推送了
2.查看所有远程仓库的别名
git remote show
3.查看某个远程仓库的详细信息
git remote show origin
4.设置推送远程的默认行为为simple
git config --global push.default simple
#git2.0版本后可以用,有兴趣可以查阅下simple和matching的区别
5.查看所有的分支(包括本地分支和远程分支)
git branch -a
#远程分支会用红色字体显示
git branch -av
#-v 输出最后一次提交的信息,包括本地与远程的提前或者落后信息
#若确定远程有新分支,本地需要先pull一下,把远程的新分支映射到本地。因为我们当前用git branch -av看到的远程分支只是真实远程分支的一个映射,如origin/master,它只是存储在本地的一个映射。想要更新这个映射,就需要使用git pull这样拉取的命令。
git pull
git branch -av
6.克隆远程仓库到本地
git clone http://github.com/aaa/bbb.git
#clone会把远程所有的分支全部拉下来,可以用git branch -av命令看所有远程分支,以及当前正使用的远程分支
需要注意:git push的完整写法:
git push origin src本地分支:dest远程分支
远程协作模型
1、开发者A与开发者B协同开发某个项目
开发者A:
#创建好本地仓库,将本地仓库推送到远程
git remote add origin http://github.com/ab/aabb.git
git push -u origin master
开发者B:
#将远程仓库clone到本地
git clone http://github.com/ab/aabb.git
#开始编程功能B,完成后提交代码到本地
git commit -am 'function B'
#将本地仓库推送到远程
git push
开发者A:
#查看远程仓库的状态,目前本地相对于远程肯定是过时的(local out of date)
git remote show origin
#拉取最新的远程代码,git pull相当于git fetch + git merge
git pull
#编写功能A1,完成后提交代码到本地
git commit -am 'function A1'
#将本地仓库推送到远程
git push
开发者B:
#编写功能A2,完成后提交代码到本地。 A1和A2功能在同一块代码里
git commit -am 'function A2'
#将本地仓库推送到远程。此时A1和A2必然冲突,推送失败。
git push
#拉取最新的远程代码到本地。此时A1和A2自动合并冲突,需要手动merge
git pull
#假设文件为FuntionA.java,手动merge结束后,提交
git add FuntionA.java
git commit -m 'merge finish'
#将本地仓库推送到远程(其实推送的是两个提交,原理如下图)
git push
为什么origin/master会指向commit1呢?
因为origin/master是远程映射到本地的一个分支,在本地存储,原本就指向commit1。当本地pull操作失败后,并没有与同步远程,即:没有修改为commit2。当用户合并冲突后,产生commit4,相对于commit1而言,提前了两次提交。
本地pull操作,其实质分为两步:
1.远程master分支fetch到本地origin/master分支
2.本地origin/master分支再自动merge到本地master分支
而pull操作失败,其实是第2步自动merge的时候失败了。
git远程分支使用的几种最佳实践
1、Gitflow
2、基于Git远程分支的开发模型:
开发分支:develop分支(频繁变化的一个分支)
测试分支:test分支(供测试与产品等人员使用的分支,变化不是特别频繁)
生产发布分支:master分支(变化非常不频繁的一个分支)
BUG修复分支:bugfix(hotfix)分支(生产系统中出现了紧急Bug,用于紧急修复的分支)