git操作指令(git命令手册分支操作)

git操作指令(git命令手册分支操作)(1)

git命令手册往期内容回顾:

git命令手册:仓库操作

git命令手册:远程仓库操作

分支简介

分支一方面类似科幻电影里面经常出现的平行宇宙,每个分支的代码版本都是独立演进的,分支之间的代码版本完全不会干扰另外一个代码版本的开发。但是,与平行宇宙不同的一点是,分支之间还能合并。

Git 的分支相比 SVN 要轻量很多,这是因为 Git 分支并不是复制一个新仓库,而是为一个分支存储一个指针,这个指针将指向某个提交对象。没错,这就和数据结构中常见的指针链表一样。所以 Git 的分支只是指针,并没有将仓库进行复制,每次提交都会让当前的分支向后移动,指向最后一次提交的对象。当你在切换分支时,Git 也只是改变指向当前所在分支的特殊指针 HEAD,所以可以快速地在各个分支之间进行切换。


本文将对分支操作进行归纳说明,具体如下:

1.分支的创建

分支的创建, 其实本质就是创建一个可以移动的指针,这个指针名就是新的分支名

$ git branch dev

merge合并效果

git操作指令(git命令手册分支操作)(2)

rebase合并效果

图片1是merge合并效果, 图片2是rebase合并效果. 明显变基会让提交历史看起来更加干净. 使用如下:

# rebase <目标分支名> [需要移动变基底的分支]

$ git rebase master experiment

# 此时目标分支后面会追加另一个分支的提交. 此时只需要切换到master分支,合并分支即可.

$ git checkout master

$ git merge experiment

rebase原理就是, 从目标分支和要变基的分支向上查找出共同祖先节点就是c2, 然后把要变基的分支到c2节点的所有提交,提取出相应的修改生成一个副本, 并追加到目标分创建相对应的提交. 此时变基的分支指向目标分支master的后面某一次提交. 此时只要使用修改master指向指针使用merge即可.

7.远程分支

# 获得远程的仓库列表

$ git ls-remote origin

# 如果想获得更多的信息

$ git remote show origin

# 查看远程分支和本地分支

$ git branch -a


7.1)拉取远程分支

假设远程如果有一个dev分支, 你使用fetch进行抓取. 这个时候, 本地不会自动生成一个可编辑的副本, 换句话说就是这种情况下, 不会有一个新的dev本地分支, 只有一个不可以修改的origin/dev指针. 这个时候可以运行git merge origin/dev命令, 将这些远程dev分支的工作合并到当前分支. 如果想要在自己本地的dev分支上工作, 可以将其建立在远程分支之上.

$ git checkout -b dev origin/dev


7.2)创建远程分支

如果你的本地有一个新建的dev分支, 并且你进行了提交, 此时你想把这个分支也提交到远程的dev分支, 但是远程还没有创建dev, 这个时候可以使用如下命令:git push <远程仓库名> <要推送的本地分支>

$ git push origin dev


7.3)删除远程分支

# 删除远程dev分支

$ git push origin --delete dev

8.跟踪分支

从一个远程跟踪分支检出一个本地分支会自动创建一个叫做跟踪分支(有时候也叫做 “上游分支”)。 跟踪分支是与远程分支有直接关系的本地分支。 如果在一个跟踪分支上输入git pull,Git能自动地识别去哪个服务器上抓取、合并到哪个分支。

当克隆一个仓库时,它通常会自动地创建一个跟踪origin/master的master分支。 然而,如果你愿意的话可以设置其他的跟踪分支 - 其他远程仓库上的跟踪分支,或者不跟踪master分支。 最简单的就是之前看到的例子,运行git checkout -b [branch] [remotename]/[branch]。 这是一个十分常用的操作所以 Git 提供了--track快捷方式:

$ git checkout --track origin/dev

# 如果想要自定义本地分支名字

$ git checkout -b 任意分支名字 origin/dev


8.1)设置已有的本地分支跟踪一个刚刚拉取下来的远程分支,或者想要修改正在跟踪的上游分支,你可以在任意时间使用 -u 或 --set-upstream-to 选项运行 git branch 来显式地设置。

# 设置HEAD指向的分支的上游为远程dev分支

$ git branch -u origin/dev


8.2)查看设置的所有跟踪分支

$ git branch -vv


微信公众号

更多精品技术干货,微信搜索关注【开发者小黑屋

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页