git 分支操作

1.简单操作

查看本地分支 :git branch    
查看所有分支git :branch -a   
查看远程分支 :git branch -r   
查看本地分支与远程分支关联关系:git branch -vv    
新建本地分支:git branch A
删除本地分支:git branch -d A    
删除远程分支:git push origin -d A   
切换本地分支:git checkout A  
创建本地分支并切换 :git checkout -b  A 
创建本地空分分支:git  checkout --orphan  A
拉取远程分支并创建本地分支:git checkout -b 本地A  origin/A
推送本地分支到远程:git push origin 本地A:A  
本地分支关联远程分支:git branch --set-upstream-to origin/A A  
本地分支关联远程分支:git push  --set-upstream  origin A 
取消关联:git branch --unset-upstream A 
合并分支:git merge A

2.git pull、git push和git fetch操作

本地分支与远程分支存可以设定追踪关系,一般git clone后,本地分支会与远程同名分支建立追踪关系。可以为不同名分支建立追踪关系。

先用一张图来理一下git fetch和git pull的概念:


image

可以简单的概括为:
git fetch是将远程主机的最新内容拉到本地仓库,用户比较不同后决定是否合并到工作分支中。
而git pull 则是更新远程仓库的代码到本地仓库,然后将内容合并到当前分支。,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

下面我们来详细了解一下git fetch 和git pull 的用法:

2.1 git fetch

本地库更新至远程库的最新状态,但是不把新代码合并到当前分支。后续可以使用checkout创建新分支或者merge合并到其他分支。

(1)git fetch <远程主机名> :将远程主机所有分支更新到本地

这一步其实是执行了两个关键操作:

  • 创建并更新所有远程分支的本地远程分支.
  • 设定当前分支的FETCH_HEAD为远程服务器的master分支

(2)git fetch <远程主机名> <远程分支名>:将远程主机的指定分支的更新获取到本地

git checkout -b newBranch origin/master//基于origin/master创建新分支。
git merge origin/master // 把origin/master合并到当前分支。

我们可以在本地通过它查看刚取回的更新信息,以确定是否将更新merge到当前分支:

git log -p FETCH_HEAD
=
git log -p 远程分支名

FETCH_HEAD指的是:某个branch在服务器上的最新状态。每一个执行过fetch操作的项目都会存在一个FETCH_HEAD列表, 这个列表保存在 .git/FETCH_HEAD 文件中, 其中每一行对应于远程服务器的一个分支。当前分支指向的FETCH_HEAD, 就是这个文件第一行对应的那个分支.
一般来说, 存在两种情况:
如果没有显式的指定远程分支, 则远程分支的master将作为默认的FETCH_HEAD
如果指定了远程分支, 就将这个远程分支作为FETCH_HEAD

2.2 git pull

获取远程主机的指定分支,并合并到本地某个分支,相当于git fetch+git merge

git pull orgin master  //从远程主机的master分支拉取最新内容 并合并到当前分支
=
git fetch origin master //从远程主机的master分支拉取最新内容 
git merge origin/master    //将拉取下来的最新内容合并到当前所在的分支中

(1)git pull <远程主机名> <远程分支名>:<本地分支名> :获取远程主机的分支的代码,并合并到本地分支

(2)git pull <远程主机名> <远程分支名>:省略本地分支,表示与当前分支合并

(3)git pull <远程主机名>: 当前分支与远程主机存在追踪关系时,可以省略远程分支名。表明拉取与当前分支存在追踪关系的远程分支
(4)git pull: 当前分支在所有远程主机中只存在一个追踪关系时,可以省略远程主机名

如果合并需要采用rebase模式,可以使--rebase选项,上述命令其实相当于git fetch 和 git merge在实际使用中,git fetch更安全一些,因为在merge前,我们可以查看更新情况,然后再决定是否合并。

2.3 git push

将分地分支的提交,推送到远处主机的指定分支。如果不存在远程分支,那么新建远程分支

(1)git push <远程主机名> <本地分支名>:<远程分支名>
(2)git push <远程主机名> <本地分支名> :省略远程分支名,把本地分支推送到它追踪的远程分支,没有则新建
(3)git push <远程主机名>:如果当前分支和远程分支有追踪关系,那么可以省略本地和远程分支名
(4)git push:如果当前分支只有一个追踪分支,那么远程主机名也能省略

2.4 分支合并

图解4种git合并分支方法

你可能感兴趣的:(git 分支操作)