git 入门教程之分支总览
分支就是一条独立的时间线,既有分支,必有主干,正如一棵树谈到树枝,必有树干一样的道理.我们先前对git
的全部操作默认都是在主干上进行的,这个主干也是一种特殊的分支,名为 master
分支.
无论是穿越历史还是撤销更改,我们都或多或少接触过时间线,git
管理的版本串在一起就组成了这个时间线,其中master
分支是当前分支,HEAD
指向master
,因此HEAD
相当于指向了最新的版本.
基于分支上的操作,每一次 commit
都会提交一个新版本,并且新的 commit
指向原来的 commit
,这来最新的 commit
就可以往前找,直到找到最初的commit
.这就是 git
的时间线.
当我们打算开辟新的时间线时,git
在当前 HEAD
指向的 master
分支的 commit
处新建一个 dev
分支.如果主角没有主动进入时间线的话,那么仍然处于 master
分支,进入的方法就是 HEAD
指向新建的 dev
分支.
不考虑孙悟空的分身特效,主角不能同时处于不同的时空下,git
也是如何,HEAD
只能指向某一个 commit
,既然刚刚已经指向了 dev
分支,所以原来的 master
分支就没有 HEAD
了,因为相当于master
分支静止了.
当主角在 dev
分支独自闯荡干出一番事业时,决定回到故乡 master
分支,并将出门在外所学的本领带回家乡,建设美好家园.master
分支因为合并了 dev
分支,所以一下子增添了很多内容,家乡焕然一新!
主角这次携带 dev
分支归来,HEAD
分支自然又回到了 master
分支上,年轻的心向往外面的世间,相信不久后还会有同样的故事发生...
下面详解分支相关命令
创建分支
创建 dev
分支,列出分支已验证是否创建成功
# 创建分支
$git branch dev
# 列出分支
$ git branch
dev
* master
$
*
master
前面的 * 标记表明当前仍然处于master
分支
切换分支
切换到新分支以便在分支上开展工作
# 切换分支
$ git checkout dev
Switched to branch 'dev'
# 列出分支
$ git branch
* dev
master
$
现在,我们在 dev
分支上奋笔疾书,先后提交两个版本后完成分支开发工作:
# 查看当前文件列表
$ ls
LICENSE README.md test.txt
# 查看目标文件内容
$ cat test.txt
add test.txt
see https://snowdreams1006.github.io/git/usage/remote-repository.html
# 第一个版本: learn git branch
$ echo "learn git branch" >> test.txt
$ git add test.txt
$ git commit -m "learn git branch"
[dev 9c30e50] learn git branch
1 file changed, 1 insertion(+)
# 第二个版本: see https://snowdreams1006.github.io/git/usage/branch-overview.html
$ echo "see https://snowdreams1006.github.io/git/usage/branch-overview.html" >> test.txt
$ git add test.txt
sunpodeMacBook-Pro:git-demo sunpo$ git status
On branch dev
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: test.txt
$ git commit -m "see https://snowdreams1006.github.io/git/usage/branch-overview.html"
[dev 413a4d1] see https://snowdreams1006.github.io/git/usage/branch-overview.html
1 file changed, 1 insertion(+)
此时,再从 dev
分支切换回 master
分支,合并dev
分支前看一下当前文件内容:
# 切换回 master 分支
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
sunpodeMacBook-Pro:git-demo sunpo$ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
# 查看当前文件列表
$ ls
LICENSE README.md test.txt
# 查看文件内容: 无 dev 分支更改
$ cat test.txt
add test.txt
see https://snowdreams1006.github.io/git/usage/remote-repository.html
$
合并分支
切换回 master
分支并没有我们在 dev
分支的更改,因为两条时间线是独立的,现在合并 dev
分支,再看一下当前文件内容:
# 合并 dev 分支
$ git merge dev
Updating b3d8193..413a4d1
Fast-forward
test.txt | 2 ++
1 file changed, 2 insertions(+)
# 查看文件内容: 已经存在 dev 分支的更改!
$ cat test.txt
add test.txt
see https://snowdreams1006.github.io/git/usage/remote-repository.html
learn git branch
see https://snowdreams1006.github.io/git/
删除分支
合并分支后,dev
分支的历史使命已经完成,应该及时清空不必要分支.
# 删除 dev 分支
$ git branch -d dev
Deleted branch dev (was 413a4d1).
# 列出当前分支: 只剩下 master 分支
$ git branch
* master
$
以上场景包括了分支的常用操作,创建分支(git branch <name>
),切换分支(git checkout <name>
),删除分支(git branch -d <name>
)一系列操作十分流畅,因此 git
鼓励我们大量使用分支!
小结
- 列出分支
git branch
- 创建分支
git branch <name>
- 切换分支
git checkout <name>
- 创建并切换分支
git checkout -b <name>
- 合并指定分支到当前分支
git merge <name>
- 删除分支
git branch -d <name>
git 入门教程之分支总览的更多相关文章
- git 入门教程之分支管理
背景 什么是分支?简单地说,分支就是两个相对独立的时间线,正常情况下,独立的时间线永远不会有交集,彼此不知道对方的存在,只有特定情况下,两条时间线才会相遇,因为相遇,所以相知,因为相知,所以改变! 正 ...
- git 入门教程之分支策略
默认情况下合并分支常常直接使用 git merge 命令,是最方便快速的合并方法.其实这种情况下 git 采用的是 fast forward 模式,特点是删除分支后,会丢失分支信息,好像从来没存在该分 ...
- git 入门教程
git 入门教程之协同开发 前面我们已经介绍过远程仓库的相关概念,不过那时并没有深入探讨,只是讲解了如何创建远程仓库以及推送最新工作成果到远程仓库,实际上远程仓库对于团队协同开发很重要,不仅仅是团队协 ...
- 廖雪峰Git入门教程
廖雪峰Git入门教程 2018-05-24 23:05:11 0 0 0 https://www.liaoxuefeng.com/wiki/00137395163059296 ...
- 创建与合并分支-git入门教程
在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD严格来说不是指向提交,而 ...
- git 入门教程之远程仓库
远程仓库 如果说本地仓库已经足够个人进行版本控制了,那么远程仓库则使多人合作开发成为可能. 如果你只是打算自己使用git,你的工作内容不需要发布给其他人看,那就用不到远程仓库的概念. git 是分布式 ...
- 解决冲突-git入门教程
人生不如意之事十之八九,合并分支往往也不是一帆风顺的. 准备新的feature1分支,继续我们的新分支开发: $ git checkout -b feature1 Switched to a new ...
- 深入学习:Windows下Git入门教程(下)
声明:由于本人对于Git的学习还处于摸索阶段,对有些概念的理解或许只是我断章取义,有曲解误导的地方还请见谅指正! 一.分支 1.1分支的概念. 对于的分支的理解,我们可以用模块化这个词来解释:在日常工 ...
- git 入门教程之知识速查
知识速查 创建版本库 初始化项目 git init 从零开始创建项目 示例 git init 克隆项目 git clone 将已有项目拷贝到本地 示例 git clone git@github.com ...
随机推荐
- tomcat8 源码分析 | 组件及启动过程
tomcat 8 源码分析 ,本文主要讲解tomcat拥有哪些组件,容器,又是如何启动的 推荐访问我的个人网站,排版更好看呦: https://chenmingyu.top/tomcat-source ...
- 常用js方法整理(个人)
开头总要有点废话 今天想了下,还是分享下自己平时积累的一些实用性较高的js方法,供大家指点和评价.本想分篇介绍,发现有点画蛇添足.整理了下也没多少拿得出手的方法,自然有一些是网上看到的个人觉得很有实用 ...
- 2017-12-19python全栈9期第四天第二节之列表的增删查改之按切片删除
#!/user/bin/python# -*- coding:utf-8 -*-li = ['zs','ls','ww','zl','xx']# del li[1:] #1到最后# print(li) ...
- fetch 的控制器和观察者
因为受 cancelable promise 的拖延,fetch 一直没有传统的 XHR 所拥有的 abort() 和 onprogress 功能,去年年底 cancelable promise 草案 ...
- Python面试题目之Python函数默认参数陷阱
请看如下一段程序: def extend_list(v, li=[]): li.append(v) return li list1 = extend_list(10) list2 = extend_l ...
- 深度学习在graph上的使用
原文地址:https://zhuanlan.zhihu.com/p/27216346 本文要介绍的这一篇paper是ICML2016上一篇关于 CNN 在图(graph)上的应用.ICML 是机器学习 ...
- TCP-IP详解笔记5
TCP-IP详解笔记5 ICMPv4和ICMPv6: Internet控制报文协议 Internet控制报文协议(Internet Control Message Protocol, ICMP)与IP ...
- 【原创】大叔经验分享(5)oozie提交spark任务如何添加依赖
spark任务添加依赖的方式: 1 如果是local方式运行,可以通过--jars来添加依赖: 2 如果是yarn方式运行,可以通过spark.yarn.jars来添加依赖: 这两种方式在oozie上 ...
- Android的路接下来该怎么走?
其实想写这篇文章好久了,很多小伙伴们也经常在群里探讨android移动开发者的走向,一部分人都想多快好省,间歇性踌躇满志.持续性混吃等死 ,只想用CV的开发模式们快速完成工作,然后回家王者农药.其实这 ...
- Felx布局基础教程
网页布局即layout是css的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中 ...