任务列表:

有一个中央库Center,和三个工作站A,B,C。

初始化时,代码存放在中央库中,A,B,C三个工作站开始工作之前都要首先从中央库克隆一份代码到本地。

第一个任务:A和B合作修复一个缺陷,要求是A先开始修复,B在A修复的基础上接着修复,然后由B把修改好的缺席推送到中央库的master上。

第二个任务:C在中央库的基础上新建一个分支开始自己的开发,并把自己新建的分支推送到中央库。

第三个任务:A和B合作修复好第一个缺席之后,A自己单独修复第二个缺席,并推送到中央库的master分支上。

第四个任务:B要等A修复完第二个缺陷和C开发完自己的代码后,把中央库上的master分支和C推送的分支合并,并推送回中央库的master分支。

1.中央库

①初始化中央库,并执行一次提交

  1. $ git init
  2. Initialized empty Git repository in /home/greta/GitTest/Center/.git/
  3. $ git add .
  4. $ git commit -m "new file a"

图示如下: 

②wsB第一次推送后,中央库的变化

图示如下:

③wsC推送后,中央库的变化

图示如下:

④wsA推送后,中央库的变化:

⑤wsB第二次推送后,中央库的变化

2.工作站A的操作

①克隆中央库到工作站A

  1. $ git clone /home/greta/GitTest/Center/.git/ wsA
  2. Cloning into wsA...
  3. done.

从Git服务器克隆数据时,Git 会自动为你将此远程仓库命名为 origin ,并下载其中所有的数据,建立一个指向它的master 分支的指针,在本地命名为 origin/master ,但你无法在本地更改其数据。接着,Git 建立一个属于你自己的本地 master 分支,始于 origin 上 master 分支相同的位置,你可以就此开始工作。

图示如下: 

②在工作站A上建立一个branch testA,并把指针切换到testA上。

  1. $ git checkout -b testA
  2. Switched to a new branch 'testA'

这里的命令$ git chekout -b testA实际上是两个命令的合并,相当于执行:

$git branch testA

$git checkout testA

图示如下(*表示当前wsA上head指针的位置): 

③在wsA上执行一次提交

  1. $ git add .
  2. $ git commit -m "submit on wsA(second)"

图示如下:

3.工作站B上的操作

①克隆中央库到工作站B

  1. $ git clone /home/greta/GitTest/Center/.git/ wsB
  2. Cloning into wsB...
  3. done.

图示如下:

②把工作站A的远程分支testA添加到工作站B,并把wsA上分支testA上的数据合并到本机的master上

  1. $ git remote add wsA /home/greta/GitTest/wsA/.git
  2. $ git fetch wsA
  3. remote: Counting objects: 5, done.
  4. remote: Total 3 (delta 0), reused 0 (delta 0)
  5. Unpacking objects: 100% (3/3), done.
  6. From /home/greta/GitTest/wsA/
  7. * [new branch]      master     -> wsA/master
  8. * [new branch]      testA      -> wsA/testA
  9. $ git merge wsA/testA
  10. Updating 20f3246..eb0f47b
  11. Fast-forward
  12. a.txt |    1 +
  13. 1 files changed, 1 insertions(+), 0 deletions(-)

用$git remote add命令添加远程分支时,会把远程机器上所有的分支都加载到本地机器上。

图示如下:

③在wsB上做些修改,并提交

  1. $ git add .
  2. $ git commit -m "submit on wsB(third)"
  3. [master de9ed05] submit on wsB(third)
  4. 1 files changed, 1 insertions(+), 0 deletions(-)

图示如下:

④把wsB上master分支的内容提交到中央库中。

  1. $ git push
  2. Counting objects: 8, done.
  3. Compressing objects: 100% (2/2), done.
  4. Writing objects: 100% (6/6), 493 bytes, done.
  5. Total 6 (delta 0), reused 0 (delta 0)
  6. Unpacking objects: 100% (6/6), done.
  7. To /home/greta/GitTest/Center/.git/
  8. 20f3246..de9ed05  master -> master

图示如下:

中央库的变化图示请参照 1.中央库-->②wsB第一次推送后,中央库的变化

4.工作站C的操作

①克隆中央库到本机 

  1. $ git clone /home/greta/GitTest/Center/.git/ wsC
  2. Cloning into wsC...
  3. done.

图示如下:

②在wsC上新建一个branch testC并把testC推送到中央库

  1. $ git checkout -b testC
  2. Switched to a new branch 'testC'
  3. $ git add .
  4. $ git commit -m "submit on wsC(Fourth)"
  5. $ git push origin testC
  6. Counting objects: 5, done.
  7. Writing objects: 100% (3/3), 274 bytes, done.
  8. Total 3 (delta 0), reused 0 (delta 0)
  9. Unpacking objects: 100% (3/3), done.
  10. To /home/greta/GitTest/Center/.git/
  11. * [new branch]      testC -> testC

图示如下:

中央库的图示请参见:1.中央库--->③wsC推送后,中央库的变化

5.wsC推送后wsA上操作

①同步wsA与中央库

  1. $ git fetch  
  2. remote: Counting objects: 8, done.  
  3. remote: Compressing objects: 100% (2/2), done.  
  4. remote: Total 6 (delta 0), reused 0 (delta 0)  
  5. Unpacking objects: 100% (6/6), done.  
  6. From /home/greta/GitTest/Center/  
  7.    20f3246..de9ed05  master     -> origin/master  
  8.  * [new branch]      testC      -> origin/testC  

图示如下:

②合并 wsA上master与中央库的master,删除分支testA, 在中央库master的基础上提交

  1. $ git checkout master  
  2. Previous HEAD position was e3e1972... submit on wsC(Fourth)  
  3. Switched to branch 'master'  
  4. Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.  
  5. $ git merge origin master  
  6. Fast-forwarding to: origin  
  7. Already up-to-date with master  
  8. Merge made by octopus.  
  9.  a.txt |    2 ++  
  10.  1 files changed, 2 insertions(+), 0 deletions(-)  
  11. $ git branch -d testA  
  12. Deleted branch testA (was eb0f47b).  
  13. $ git add .  
  14. $ git commit -m "submit on wsA(fifth)"  
  15. [master 52ef8ce] submit on wsA(fifth)  
  16.  1 files changed, 2 insertions(+), 0 deletions(-)  

图示如下:

③推送到中央库

  1. $ git push
  2. Counting objects: 6, done.
  3. Compressing objects: 100% (2/2), done.
  4. Writing objects: 100% (4/4), 447 bytes, done.
  5. Total 4 (delta 0), reused 0 (delta 0)
  6. Unpacking objects: 100% (4/4), done.
  7. To /home/greta/GitTest/Center/.git/
  8. de9ed05..52ef8ce  master -> master

图示如下:

 

wsA推送后,中央库的变化请参照:1.中央库---->  ④wsA推送后,中央库的变化

6.wsA推送后wsB的操作

①同步中央库

  1. $ git fetch
  2. remote: Counting objects: 9, done.
  3. remote: Compressing objects: 100% (3/3), done.
  4. remote: Total 7 (delta 0), reused 0 (delta 0)
  5. Unpacking objects: 100% (7/7), done.
  6. From /home/greta/GitTest/Center/
  7. de9ed05..52ef8ce  master     -> origin/master
  8. * [new branch]      testC      -> origin/testC

图示如下:

②合并34ac4和34ac3两个操作:

  1. $ git merge origin master
  2. Fast-forwarding to: origin
  3. Already up-to-date with master
  4. Merge made by octopus.
  5. a.txt |    2 ++
  6. 1 files changed, 2 insertions(+), 0 deletions(-)
  7. $ git merge origin/testC
  8. Auto-merging a.txt
  9. CONFLICT (content): Merge conflict in a.txt
  10. Automatic merge failed; fix conflicts and then commit the result.
  11. $ git mergetool
  12. $ git commit -m "merge on wsB"
  13. $ git push
  14. Counting objects: 8, done.
  15. Compressing objects: 100% (2/2), done.
  16. Writing objects: 100% (4/4), 472 bytes, done.
  17. Total 4 (delta 0), reused 0 (delta 0)
  18. Unpacking objects: 100% (4/4), done.
  19. To /home/greta/GitTest/Center/.git/
  20. 52ef8ce..bf54de7  master -> master

图示如下:

Git操作流程,基本命令演示的更多相关文章

  1. Git的基本命令介绍

    Git的安装 进入官网下载系统所需要的版本  官网地址:https://git-scm.com/downloads 点击下载按钮官方网站一般会根据操作系统的自动下载所需要的Git版本. 下载完成后,点 ...

  2. Git学习(一)——熟悉git操作流程

    本篇笔记前面都是仔细介绍使用方法,如果想跳过这些直接熟悉怎么使用,跳到最后一个知识点完整流程介绍. git 了解:特点.优点 1.git用户版和服务版整合在一起,任何机器上都安装了两个版本 2.git ...

  3. 相见恨晚的 Git 命令动画演示,一看就懂!

    虽然 Git 是一个强大的工具,但是我觉得大部分人都会同意我说的:它也可以是一个--噩梦!我一直觉得,使用 Git 的时候把操作过程在脑海里视觉化会非常有用:当我执行某个命令的时候,分支之间是如何交互 ...

  4. Git使用- 基本命令

    $ git config --global user.name "Your Name"   全局 name 设置 $ git config --global user.email ...

  5. Git Shell 基本命令(官网脱水版)

    用户信息 当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址. 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改: $ git conf ...

  6. git 的基本命令

    ...git init ...git add ...git commit -m "first commit" ...git remote add origin https://gi ...

  7. Git: 一些基本命令

    1.快速获取远程项目 1) git clone xxx.git // 如:git clone git://git.kernel.org/pub/scm/git/git.git 2) git clone ...

  8. 【Git】基本命令使用

    init: 1 git init 添加远程分支: 1 git remote add <远程主机名>  <远程主机地址url> 例如:git remote add origin  ...

  9. Git之基本命令

    先介绍一下Git: Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理.在推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中.目前, ...

随机推荐

  1. zzuli 2130: hipercijevi 链式前向星+BFS+输入输出外挂

    2130: hipercijevi Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 595  Solved: 112 SubmitStatusWeb B ...

  2. BP算法从原理到python实现

    BP算法从原理到实践 反向传播算法Backpropagation的python实现 觉得有用的话,欢迎一起讨论相互学习~Follow Me 博主接触深度学习已经一段时间,近期在与别人进行讨论时,发现自 ...

  3. Mysql 表分区和性能

    以下内容节选自<Mysql技术内幕InnoDB存储引擎> mysql表分区: 分区功能并不是所有存储引擎都支持的,如CSV.MERGE等就不支持.mysql数据库支持的分区类型为水平分区( ...

  4. Linux下一次删除百万文件

    Linux下一次删除百万文件 线上环境遇到的一个问题,文件数量过多,执行rm命令报错 # rm -f ./* -bash: /bin/rm: Argument list too long 根据报错检查 ...

  5. node-koa搭建MVC/RESTful API项目

    本文将介绍如何基于node-koa搭建一个完整的mvc及restAPI的项目,项目封装了路由.模板引擎. 静态文件加载等基本功能:首先介绍项目的安装启动及目录结构说明,然后通过一个简单的登录页说明mv ...

  6. 《31天成为IT服务达人》最新文件夹

    在网上发帖后.得到广大博友的关心与帮助,提了不少好的建议和意见,本人把书稿再次做了修改,现把章节发给大家,欢迎拍砖!呵呵. 机遇篇   第一章奇葩的IT男 1.1     半年月薪过万 1.2     ...

  7. iOS 6.0中UIViewController被弃用的一些方法

    郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 概念:de ...

  8. Git(一)之基本操作详解

    前言 在这段时间的工作中一直都是用Git作为版本控制,只是知道简单的几个命令,没有去了解它的内部原理.所以周末有时间来系统学习. 现在的公司基本上都是用Git作为版本控制,当然也有SVN的. Git是 ...

  9. iOS手势冲突问题

    今天在做一个效果的时候,由于子视图和父视图都有响应的事件,子视图的事件理所当然被父视图拦截掉了,接下来就做分析解决 1.  tableviewcell可以触发点击,同时tableview的父视图有点击 ...

  10. C# 委托与事件详解(三)

    今天我接着上面的3篇文章来讲一下,为什么我们在日常的编程活动中遇到这么多sender,EventArgs e 参数:protected void Page_Load(object sender, Ev ...