分支的掌握和理解到位对于我们工作中的并行开发十分重要,今天我们一起来研究它。

一,两人在一个分支上开发

程序员小王入职,拉取了仓库的代码,开发新需求。

git clone https://github.com/*****/gitunion.git

查看小王当前所所在的分支

git branch

可以看出当前只有master一个分支。此时通过git的图形工具查看分支指针的位置。

gitk

可以看出当前分支指针指向master。此时小王开发了部分需求并进行了提交。

git push origin master

提交后我们再来看下分支指针的位置:

可以看出分支指针向前移动了一个节点。这里我们可以得出结论:

分支指针总是随着提交而移动并且指向最新的那次提交。

此时小张入职,和小王一起在同一个分支开发。小张克隆仓库,拉取代码,并且在本地进行了一次提交。

git clone https://github.com/*****/gitunion.gitgit add Hello.javagit commit -m 'xiaozhang first commit'

此时观察小张的分支指针,可以看到小张的分支指针指向了他的最新提交。

此时小王还在继续开发,并且在他的本地进行了第二次提交

此时小王的分支指针显示如下:

此时我们可以得出结论:在各自的版本库上,分支指针的移动对于其他人员是透明的。

这时候项目完工,双方都提交了代码到远程仓库上。

此时观察分支的指针图:

可以发现,提交后,远程仓库的分支指针指向了两个人提交的合并。由此我们可以得出结论:在一个分支上开发,远程仓库会对多人的提交进行合并,以保持版本库的最新状态。

二,两人在不同分支上开发

此时小张接了新的需求,和小王的需求不一样。于是小李决定在最新的代码基础上拉一个新分支。

在现有的master分支上创建slave分支:

git branch slave master

查看当前所有分支:

git branch

可以看到新的分支已经建立,不过此时分支指针还是指向master。现在切换分支:

git checkout slave

可以看到分支已经切换

并且可以发现两个分支都指向最新的提交,说明两个分支的代码相同并且是最新的。

此时小张开发了一部分并提交了修改到本地版本库

git add Person.javagit commit -m 'xiaozhang first commit on slave'

观察小张的分支指针指向,此时分支指针指向了slave分支的最新提交

此时小王依然在开发他之前的需求,并且提交了一次最新的修改到本地版本库

git add Teacher.javagit commit -m 'xiaowang third commit'

我们观察小王的分支指针指向

可以看到小王的master指针指向了小王的第三次提交。因为小张新建的分支在他本地,所以小王此处看不到小张的slave分支。

此时人都提交了本地的版本库到远程仓库

小王:

git push origin master

小张

git push origin slave

小张新拉的分支已提交到版本库。

此时我们观察小王的分支指针指向:

小王的远程和本地master都指向了最新的修改。

我们观察小张的分支指向:

小张的远程和本地slave分支都指向了最新的修改。

由于在两个不同的分支上开发,我们发现他们并没有进行分支合并。

于是我们得出结论:两个分支开发提交后不会进行自动合并。

三,分支切换

此时小张继续提交了最新的修改

git add Student.javagit commit -m 'xiaozhang second commit on slave'

观察小张的分支指针可以发现是继续向前移动的。

此时由于小张的项目紧急度高,小王切换到了小张的分支上开发。

拉取小张的分支:

 git pull origin slave

可以看到小王的工作空间中多了小张的修改。这里可以看出:不同的分支存放在同一个工作区中。

小王切换分支(注意:当前分支若有修改未为提交,分支切换会被拒绝,强制提交会覆盖当前分支):

git checkout slave

观察小王的分支指向:

可以看出分支切换后指向了小张的最新的提交。于是可以得出结论:分支的切换,分支指针总是指向最新的提交。

到这里。我们对分支的研究已经基本差不多了。相信大家能够看明白,小编写的比较详详细和基础。

总结:

1.分支指针总是随着提交而移动并且指向最新的那次提交。

2.在各自的版本库上,分支指针的移动对于其他人员是透明的。

3.在一个分支上开发,远程仓库会对多人的提交进行合并,以保持版本库的      最新状态。

4.当前分支若有修改未为提交,分支切换会被拒绝,强制提交会覆盖当前分     支.

5.两个分支开发提交后不会进行自动合并。

6.不同的分支存放在同一个工作区中。

7.分支的切换,分支指针总是指向最新的提交。

欲穷千里目,更上一层楼!祝大家事业有成!

Git分支的创建,切换及分支指针移动的理解相关推荐

  1. Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突...

    Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突 这篇是接着上篇分布式版本库--Windows下G ...

  2. 分支管理---创建与合并分支

    在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD严格来说不是指向提交,而 ...

  3. git 拉取远程其他分支代码_git切换远程分支并拉取远程分支代码

    Git一般有很多分支,我们clone到本地的时候一般都是master分支,那么如何切换到其他分支呢?主要命令如下: 1. 查看远程分支 $ git branch -a 我在mxnet根目录下运行以上命 ...

  4. git拉取远程分支到本地分支或者创建本地新分支

    git fetch origin branchname:branchname 可以把远程某各分支拉去到本地的branchname下,如果没有branchname,则会在本地新建branchname g ...

  5. Git切换分支(创建本地分支,远程分支,合并分支代码)

    1.创建本地分支 git branch develop 2.本地切换到新创建的分支 对应的远程分支也会切换 git checkout develop 3.查看当前所在分支 git branch 4.删 ...

  6. 使用Git切换分支(创建本地分支,远程分支,合并分支代码)

    1.创建本地分支 git branch  develop 2.本地切换到新创建的分支   git checkout develop    对应的远程分支也会切换 3.查看当前所在分支   git ch ...

  7. git创建与合并分支

    创建与合并分支 在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分 支,即master分支.HEAD严格来 ...

  8. 创建与合并分支-git入门教程

    在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD严格来说不是指向提交,而 ...

  9. git创建本地分支、提交到远程分支

    [1] 查看本地分支: $ git branch master * mutilrecall [2] 查看远程分支 $ git branch -amaster * mutilrecallremotes/ ...

  10. git 切换远程分支

    git 切换远程分支 将远程git仓库里的指定分支拉取到本地(本地不存在的分支) 当我想从远程仓库里拉取一条本地不存在的分支时: git checkout -b 本地分支名 origin/远程分支名 ...

最新文章

  1. ADPRL - 近似动态规划和强化学习 - Note 8 - 近似策略迭代 (Approximate Policy Iteration)
  2. 写给云栖社区在做网站的朋友一点干货
  3. [目录]Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案
  4. C# 发送电子邮件(含附件)用到的类 system.web.mail
  5. # 起床困难综合症(二进制枚举+按位求贡献)
  6. 渗透学习笔记--基础篇--sql注入(数字型)
  7. 绝地仙王986服务器维护到几点,绝世仙王————【维护】1月12日更新维护公告...
  8. leetcode刷题:2.两数之和
  9. python 控制语句
  10. BZOJ4568 [Scoi2016]幸运数字
  11. 【MATLAB深度学习工具箱】学习笔记--螃蟹公母分类Crab Classification
  12. 基于JSP和MYSQL数据库实现的宾馆酒店信息管理系统
  13. python中stop_thread_Python threading.Thread只能用私有方法self来停止.__ Thread_stop()
  14. ios12怎么滑屏解锁_对比苹果iOS12和安卓9.0,相互学习了哪些功能
  15. TestFlight用法(iOS APP官方测试工具)
  16. 软件测试岗月薪3w+的测试,到底强在哪里?测试开发真的就是天花板了吗?
  17. R安装与卸载、RStudio安装
  18. Liunx yun 安装 mysql5.7
  19. 串行外设接口(Serial Peripheral Interface, SPI)逻辑设计部分 - spi_slave
  20. wegame每次登陆都要滑动验证_WeGame版《怪物猎人世界》的猎人们,你的权限验证正常吗?...

热门文章

  1. python 截取一周(或者N周)的日期
  2. 编译期 java.lang.IllegalArgumentException
  3. Alibaba Cloud Linux 3京东青龙面板搭建踩坑
  4. 漫威金刚狼男主弃影炒币了?
  5. 详解 Jenkins 自动化部署平台
  6. caj怎么转pdf?
  7. java 写一个quot;HelloJavaWorld你好世界quot;输出到操作系统文件Hello.txt文件中
  8. 并查集(详细解释+完整C语言代码)
  9. 再看KafkaLag
  10. 移动端页面键盘弹出后导致body高度变低背景图片被挤上去解决方法