远程分支与本地分支的交互
1:当执行完git clone克隆完某个远程仓库后,本地的仓库状态如下图:
origin/master: 你克隆的时间点远程仓库master分支的指向。
master:git自动为你创建master分支,并确定初始指向与远程仓库master分支是一样的。
2:接着其他人向该远程仓库master分支推送了信息,于是远程仓库的指向变为了这样。
3:你自己也对本地的master分支进行了开发,于是本地仓库状态变为了这样:
需要注意的是,一旦克隆之后,如果本地仓库不与远程仓库通讯,origin/master的指向是不会变的。
4:此时,远程仓库的状态与你之前克隆时已经不一样了,那么该如何将你的内容推送到远程仓库呢?答案:首先执行 git fetch origin (origin是远程仓库名),执行后本地仓库状态变为这样。
可知 git fetch origin 的作用:将本地分支分叉,拉取远程新状态,改变origin/master的指向。
5:接着你要做的就是本地分支合并
! git checkout master //切换分支到master
!! git merge origin/master //将origin/master分支合并到master分支上
6:将本地master分支推送到远程仓库master分支上。
执行 git push origin master
小结:
1:这里说下 跟踪分支
git push 的完整命令格式是这样的:
git push [remote-name] [branch-name] //推送分支到远程 remote-name: 远程仓库名称, branch-name: 本地要推送的分支名称
该命令并没有指定远程分支名称,也许你会有疑问 git push origin master 之后,是怎么确定内容推送到远程哪个分支?这就和跟踪分支有关了。
当执行完git clone之后,本地的master就默认是远程master分支的跟踪分支,推送本地master分支之后,会自动推送到远程master分支上。
如何设置其他分支的跟踪分支呢?
下面三个方法是设置跟踪分支
git checkout -b [branch][remotename]/[branch]
git checkout --track origin/serverfix //这种方式是第一种的快捷写法
git checkout -b sf origin/serverfix //这种方式是为本地分支设置别名的创建跟踪分支的方式。
git branch -vv // 本地仓库分支与远程仓库分支进行对比信息
git fetch --all //拉取全部的分支
git push origin --delete serverfix //推送后删除远程分支