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的概念:
可以简单的概括为:
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
:如果当前分支只有一个追踪分支,那么远程主机名也能省略