Git分支的创建,切换及分支指针移动的理解
分支的掌握和理解到位对于我们工作中的并行开发十分重要,今天我们一起来研究它。
一,两人在一个分支上开发
程序员小王入职,拉取了仓库的代码,开发新需求。
git clone https://github.com/*****/gitunion.git
查看小王当前所所在的分支
git branch
可以看出当前只有master一个分支。此时通过git的图形工具查看分支指针的位置。
gitk
可以看出当前分支指针指向master。此时小王开发了部分需求并进行了提交。
git push origin master
提交后我们再来看下分支指针的位置:
可以看出分支指针向前移动了一个节点。这里我们可以得出结论:
分支指针总是随着提交而移动并且指向最新的那次提交。
此时小张入职,和小王一起在同一个分支开发。小张克隆仓库,拉取代码,并且在本地进行了一次提交。
git clone https://github.com/*****/gitunion.git
git add Hello.java
git commit -m 'xiaozhang first commit'
此时观察小张的分支指针,可以看到小张的分支指针指向了他的最新提交。
此时小王还在继续开发,并且在他的本地进行了第二次提交
此时小王的分支指针显示如下:
此时我们可以得出结论:在各自的版本库上,分支指针的移动对于其他人员是透明的。
这时候项目完工,双方都提交了代码到远程仓库上。
此时观察分支的指针图:
可以发现,提交后,远程仓库的分支指针指向了两个人提交的合并。由此我们可以得出结论:在一个分支上开发,远程仓库会对多人的提交进行合并,以保持版本库的最新状态。
二,两人在不同分支上开发
此时小张接了新的需求,和小王的需求不一样。于是小李决定在最新的代码基础上拉一个新分支。
在现有的master分支上创建slave分支:
git branch slave master
查看当前所有分支:
git branch
可以看到新的分支已经建立,不过此时分支指针还是指向master。现在切换分支:
git checkout slave
可以看到分支已经切换
并且可以发现两个分支都指向最新的提交,说明两个分支的代码相同并且是最新的。
此时小张开发了一部分并提交了修改到本地版本库
git add Person.java
git commit -m 'xiaozhang first commit on slave'
观察小张的分支指针指向,此时分支指针指向了slave分支的最新提交
此时小王依然在开发他之前的需求,并且提交了一次最新的修改到本地版本库
git add Teacher.java
git commit -m 'xiaowang third commit'
我们观察小王的分支指针指向
可以看到小王的master指针指向了小王的第三次提交。因为小张新建的分支在他本地,所以小王此处看不到小张的slave分支。
此时人都提交了本地的版本库到远程仓库
小王:
git push origin master
小张
git push origin slave
小张新拉的分支已提交到版本库。
此时我们观察小王的分支指针指向:
小王的远程和本地master都指向了最新的修改。
我们观察小张的分支指向:
小张的远程和本地slave分支都指向了最新的修改。
由于在两个不同的分支上开发,我们发现他们并没有进行分支合并。
于是我们得出结论:两个分支开发提交后不会进行自动合并。
三,分支切换
此时小张继续提交了最新的修改
git add Student.java
git commit -m 'xiaozhang second commit on slave'
观察小张的分支指针可以发现是继续向前移动的。
此时由于小张的项目紧急度高,小王切换到了小张的分支上开发。
拉取小张的分支:
git pull origin slave
可以看到小王的工作空间中多了小张的修改。这里可以看出:不同的分支存放在同一个工作区中。
小王切换分支(注意:当前分支若有修改未为提交,分支切换会被拒绝,强制提交会覆盖当前分支):
git checkout slave
观察小王的分支指向:
可以看出分支切换后指向了小张的最新的提交。于是可以得出结论:分支的切换,分支指针总是指向最新的提交。
到这里。我们对分支的研究已经基本差不多了。相信大家能够看明白,小编写的比较详详细和基础。
总结:
1.分支指针总是随着提交而移动并且指向最新的那次提交。
2.在各自的版本库上,分支指针的移动对于其他人员是透明的。
3.在一个分支上开发,远程仓库会对多人的提交进行合并,以保持版本库的 最新状态。
4.当前分支若有修改未为提交,分支切换会被拒绝,强制提交会覆盖当前分 支.
5.两个分支开发提交后不会进行自动合并。
6.不同的分支存放在同一个工作区中。
7.分支的切换,分支指针总是指向最新的提交。
欲穷千里目,更上一层楼!祝大家事业有成!
Git分支的创建,切换及分支指针移动的理解相关推荐
- Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突...
Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突 这篇是接着上篇分布式版本库--Windows下G ...
- 分支管理---创建与合并分支
在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD严格来说不是指向提交,而 ...
- git 拉取远程其他分支代码_git切换远程分支并拉取远程分支代码
Git一般有很多分支,我们clone到本地的时候一般都是master分支,那么如何切换到其他分支呢?主要命令如下: 1. 查看远程分支 $ git branch -a 我在mxnet根目录下运行以上命 ...
- git拉取远程分支到本地分支或者创建本地新分支
git fetch origin branchname:branchname 可以把远程某各分支拉去到本地的branchname下,如果没有branchname,则会在本地新建branchname g ...
- Git切换分支(创建本地分支,远程分支,合并分支代码)
1.创建本地分支 git branch develop 2.本地切换到新创建的分支 对应的远程分支也会切换 git checkout develop 3.查看当前所在分支 git branch 4.删 ...
- 使用Git切换分支(创建本地分支,远程分支,合并分支代码)
1.创建本地分支 git branch develop 2.本地切换到新创建的分支 git checkout develop 对应的远程分支也会切换 3.查看当前所在分支 git ch ...
- git创建与合并分支
创建与合并分支 在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分 支,即master分支.HEAD严格来 ...
- 创建与合并分支-git入门教程
在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD严格来说不是指向提交,而 ...
- git创建本地分支、提交到远程分支
[1] 查看本地分支: $ git branch master * mutilrecall [2] 查看远程分支 $ git branch -amaster * mutilrecallremotes/ ...
- git 切换远程分支
git 切换远程分支 将远程git仓库里的指定分支拉取到本地(本地不存在的分支) 当我想从远程仓库里拉取一条本地不存在的分支时: git checkout -b 本地分支名 origin/远程分支名 ...
最新文章
- ADPRL - 近似动态规划和强化学习 - Note 8 - 近似策略迭代 (Approximate Policy Iteration)
- 写给云栖社区在做网站的朋友一点干货
- [目录]Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案
- C# 发送电子邮件(含附件)用到的类 system.web.mail
- # 起床困难综合症(二进制枚举+按位求贡献)
- 渗透学习笔记--基础篇--sql注入(数字型)
- 绝地仙王986服务器维护到几点,绝世仙王————【维护】1月12日更新维护公告...
- leetcode刷题:2.两数之和
- python 控制语句
- BZOJ4568 [Scoi2016]幸运数字
- 【MATLAB深度学习工具箱】学习笔记--螃蟹公母分类Crab Classification
- 基于JSP和MYSQL数据库实现的宾馆酒店信息管理系统
- python中stop_thread_Python threading.Thread只能用私有方法self来停止.__ Thread_stop()
- ios12怎么滑屏解锁_对比苹果iOS12和安卓9.0,相互学习了哪些功能
- TestFlight用法(iOS APP官方测试工具)
- 软件测试岗月薪3w+的测试,到底强在哪里?测试开发真的就是天花板了吗?
- R安装与卸载、RStudio安装
- Liunx yun 安装 mysql5.7
- 串行外设接口(Serial Peripheral Interface, SPI)逻辑设计部分 - spi_slave
- wegame每次登陆都要滑动验证_WeGame版《怪物猎人世界》的猎人们,你的权限验证正常吗?...