1.创建分支 git branch son parent

//创建分支,是在master 分支的基础上创建

zhangshuli@zhangshuli-MS-:~/myGit$ git st
# On branch master
nothing to commit (working directory clean)
zhangshuli@zhangshuli-MS-:~/myGit$ ls
aaa.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git branch second master
zhangshuli@zhangshuli-MS-:~/myGit$ git br -av
* master f73968d my second commit
second f73968d my second commit 

星号表示当前所处的分支,一般master是主分支

2.删除分支 git branch -d son(如果你想要删除的分支不能删除,这时候你可以使用-D强制删除)

zhangshuli@zhangshuli-MS-:~/myGit$ git br -av
* master f73968d my second commit
second f73968d my second commit
zhangshuli@zhangshuli-MS-:~/myGit$ git branch -d master
error: Cannot delete the branch 'master' which you are currently on.
zhangshuli@zhangshuli-MS-:~/myGit$ git branch -d second
Deleted branch second (was f73968d).
zhangshuli@zhangshuli-MS-:~/myGit$ git br -av
* master f73968d my second commit
zhangshuli@zhangshuli-MS-:~/myGit$

我们不能删除当前所处的分支

zhangshuli@zhangshuli-MS-:~/myGit$ git branch second master
zhangshuli@zhangshuli-MS-:~/myGit$ git br -av
* master f73968d my second commit
second f73968d my second commit
zhangshuli@zhangshuli-MS-:~/myGit$ git checkout second
Switched to branch 'second'
zhangshuli@zhangshuli-MS-:~/myGit$ git br -av
master f73968d my second commit
* second f73968d my second commit
zhangshuli@zhangshuli-MS-:~/myGit$ git branch -d master
Deleted branch master (was f73968d).
zhangshuli@zhangshuli-MS-:~/myGit$

事实证明,主分支也是可以删除的,这个似乎不存在所谓的父类节点关系,倒是更像 拷贝

3.探索两个分支间的关系

zhangshuli@zhangshuli-MS-:~/myGit$ git br -av
* second 2e32a61 master add
zhangshuli@zhangshuli-MS-:~/myGit$ git branch son second
zhangshuli@zhangshuli-MS-:~/myGit$ git br -av
* second 2e32a61 master add
son 2e32a61 master add
zhangshuli@zhangshuli-MS-:~/myGit$ git log
commit 2e32a615216de70720d314b8fe53c1bddccfd6a3
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Thu Feb :: + master add commit f73968df521e48d23289c5563f7ac7fbc5937b57
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Fri Feb :: + my second commit commit 4c7cede87be37783ca4528fbdcd79bc08e3870fe
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Fri Feb :: + my frist commit
zhangshuli@zhangshuli-MS-:~/myGit$ git checkout son
Switched to branch 'son'
zhangshuli@zhangshuli-MS-:~/myGit$ git br -av
second 2e32a61 master add
* son 2e32a61 master add
zhangshuli@zhangshuli-MS-:~/myGit$ git log
commit 2e32a615216de70720d314b8fe53c1bddccfd6a3
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Thu Feb :: + master add commit f73968df521e48d23289c5563f7ac7fbc5937b57
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Fri Feb :: + my second commit commit 4c7cede87be37783ca4528fbdcd79bc08e3870fe
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Fri Feb :: + my frist commit
zhangshuli@zhangshuli-MS-:~/myGit$

1)创建分支以后,两个分支的内容完全相同

zhangshuli@zhangshuli-MS-:~/myGit$ vim ccc.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git st
# On branch son
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# ccc.txt
nothing added to commit but untracked files present (use "git add" to track)
zhangshuli@zhangshuli-MS-:~/myGit$ git commit
# On branch son
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# ccc.txt
nothing added to commit but untracked files present (use "git add" to track)
zhangshuli@zhangshuli-MS-:~/myGit$ git add .
zhangshuli@zhangshuli-MS-:~/myGit$ git st
# On branch son
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: ccc.txt
#
zhangshuli@zhangshuli-MS-:~/myGit$ git checkout second
A ccc.txt
Switched to branch 'second'
zhangshuli@zhangshuli-MS-:~/myGit$ git log
commit 2e32a615216de70720d314b8fe53c1bddccfd6a3
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Thu Feb :: + master add commit f73968df521e48d23289c5563f7ac7fbc5937b57
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Fri Feb :: + my second commit commit 4c7cede87be37783ca4528fbdcd79bc08e3870fe
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Fri Feb :: + my frist commit
zhangshuli@zhangshuli-MS-:~/myGit$ ls
aaa.txt bbb.txt ccc.txt
zhangshuli@zhangshuli-MS-:~/myGit$

2)当我在子分支上添加了一个修改的时候,父分支会跟着做相应的修改

zhangshuli@zhangshuli-MS-:~/myGit$ git br -av
* parent 5ad0d1e parent test
son 2974d86 son test
zhangshuli@zhangshuli-MS-:~/myGit$ ls
aaa.txt bbb.txt ddd.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit 5ad0d1ece9b7fd69a9e4deb990c8a4d05d2cbee1
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Thu Feb :: + parent test
zhangshuli@zhangshuli-MS-:~/myGit$ git checkout son
Switched to branch 'son'
zhangshuli@zhangshuli-MS-:~/myGit$ ls
aaa.txt bbb.txt ccc.txt ddd.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit 2974d86cea7341e5921368ceb708c61f7c77e6c5
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Thu Feb :: + son test
zhangshuli@zhangshuli-MS-:~/myGit$ vim add.txt
zhangshuli@zhangshuli-MS-:~/myGit$ vim commit.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git add add.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git add commit.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git commit commit.txt
[son 17619d8] son commit
files changed, insertions(+), deletions(-)
create mode commit.txt
zhangshuli@zhangshuli-MS-:~/myGit$ ls
aaa.txt add.txt bbb.txt ccc.txt commit.txt ddd.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git st
# On branch son
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: add.txt
#
zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit 17619d87e77a80ef744be6b542cd87ef2f62b71e
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Thu Feb :: + son commit
zhangshuli@zhangshuli-MS-:~/myGit$ git checkout parent
A add.txt
Switched to branch 'parent'
zhangshuli@zhangshuli-MS-:~/myGit$ ls
aaa.txt add.txt bbb.txt ddd.txt
zhangshuli@zhangshuli-MS-:~/myGit$ ls
aaa.txt add.txt bbb.txt ddd.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git st
# On branch parent
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: add.txt
#
zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit 5ad0d1ece9b7fd69a9e4deb990c8a4d05d2cbee1
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Thu Feb :: + parent test
zhangshuli@zhangshuli-MS-:~/myGit$

3)终于可以对分支盖棺定论了,原来是这样的,两个分支是同步的,直到其中的一个进行了commit,否则,当我们切换两个有父子关系的分支的时候,分支会自动merge,如果父分支创建了子分支已经存在的文件,你会发现会有merge冲突。如下

zhangshuli@zhangshuli-MS-:~/myGit$ git st
# On branch parent
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: add.txt
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: aaa.txt
#
zhangshuli@zhangshuli-MS-:~/myGit$ git checkout son
M aaa.txt
A add.txt
Switched to branch 'son'
zhangshuli@zhangshuli-MS-:~/myGit$ git st .
# On branch son
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: add.txt
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: aaa.txt
#
zhangshuli@zhangshuli-MS-:~/myGit$ vim aaa.txt
zhangshuli@zhangshuli-MS-:~/myGit$ vim commit.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git checkout parent
M aaa.txt
A add.txt
Switched to branch 'parent'
zhangshuli@zhangshuli-MS-:~/myGit$ vim commit.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git checkout son
error: Untracked working tree file 'commit.txt' would be overwritten by merge.
zhangshuli@zhangshuli-MS-:~/myGit$

如果我们把修改提交了,那么你就会发现两个分支是完全不关联的

4.分支变基 git rebase

zhangshuli@zhangshuli-MS-:~/myGit$ git checkout son
Switched to branch 'son'
zhangshuli@zhangshuli-MS-:~/myGit$ vim aaa.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git st
# On branch son
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: aaa.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
zhangshuli@zhangshuli-MS-:~/myGit$ git add .
zhangshuli@zhangshuli-MS-:~/myGit$ git commit -m "son rebase"
[son e2e09c4] son rebase
files changed, insertions(+), deletions(-)
zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit e2e09c4898f9246b1d0fab2dc6845506f5960742
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Fri Feb :: + son rebase
zhangshuli@zhangshuli-MS-:~/myGit$ git rebase parent
Current branch son is up to date.
zhangshuli@zhangshuli-MS-:~/myGit$ git br -av
parent 5ad0d1e parent test
* son e2e09c4 son rebase
zhangshuli@zhangshuli-MS-:~/myGit$ git checkout parent
Switched to branch 'parent'
zhangshuli@zhangshuli-MS-:~/myGit$ git rebase son
First, rewinding head to replay your work on top of it...
Fast-forwarded parent to son.
zhangshuli@zhangshuli-MS-:~/myGit$ ls
aaa.txt bbb.txt ccc.txt ddd.txt
zhangshuli@zhangshuli-MS-:~/myGit$ vim aaa.txt
zhangshuli@zhangshuli-MS-:~/myGit$

具体关于git reset 跟 git rebase的区别联系,参考飞林沙的博文git rebase(转)

之前有一点一直弄不明白,就是自己想把son rebase到parent上的时候,这时候我执行如下命令

git checkout son

git rebase parent

是不行的,后来才发现,当你希望把son rebase parent上的时候,必须先切换到parent,然后在git rebase son

worktools-git 工具的使用总结(2)的更多相关文章

  1. 【转】第 02 天:在 Windows 平台必裝的三套 Git 工具

    原文网址:https://github.com/doggy8088/Learn-Git-in-30-days/blob/master/docs/02%20%E5%9C%A8%20Windows%20% ...

  2. windows中使用Git工具连接GitHub(配置篇)

    Git在源码管理领域目前占很大的比重了,而且开源的项目很多都转到GitHub上面了.例如:jQuery, reddit, Sparkle, curl, Ruby on Rails, node.js,  ...

  3. Git详解之六 Git工具(转)

    Git 工具 现在,你已经学习了管理或者维护 Git 仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支及合并的威力. 接下来你 ...

  4. Git详解之六:Git工具

    Git 工具 现在,你已经学习了管理或者维护 Git 仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支及合并的威力.(伯乐在线 ...

  5. 使用git工具将项目上传到github

    注册github账号 https://github.com/ 安装git工具: https://git-for-windows.github.io/ 上面的准备工作完成后,现在开始操作. 一.进入gi ...

  6. Git工具的使用教程

    Git 是一种版本控制工具,也叫作版本管理软件(分布式管理软件).这里介绍Git的基本使用步骤,关于 Git 更详细的介绍,读者可以参考其官方网站提供的文档. 1  安装Git 在Ubuntu系统中安 ...

  7. 使用git工具快速push项目到github(精简)

    Dear Weber ,相信有很多刚开始接触前端的程序猿,在刚接触到git工具传项目到github上时会遇到一些问题,那么下面的话呢,我就整理一下一个大致的思路提供给大家参考: 工具:git (自行下 ...

  8. 代码管理工具:使用github和git工具管理自己的代码

    一.git工具和账户创建 1.1 安装 Git 是 Linus Torvalds 最近实现的源代码管理软件."Git 是一个快速.可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系 ...

  9. 使用git工具上传自己的程序到github上

    一:前期准备 可以运行的项目 github账号 git工具 二:开始操作 1.创建个人github仓库 写自己项目的名字,描述,权限,README 2.新建结束后会进入如下界面 3.复制仓库地址 4. ...

  10. Git工具使用

    GIT(分布式版本控制系统) Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git的读音为/gɪt/. Git是一个开源的分布式版本控制系统,可以有效.高速的处理从 ...

随机推荐

  1. 【转】 基于C#.NET的高端智能化网络爬虫 2

    [转] 基于C#.NET的高端智能化网络爬虫2 本篇故事的起因是携程旅游网的一位技术经理,豪言壮举的扬言要通过他的超高智商,完美碾压爬虫开发人员,作为一个业余的爬虫开发爱好者,这样的言论我当然不能置之 ...

  2. cocos2dx 3.0 windows8下开发环境搭建搭建 不须要cygwin

    已经接触cocos2dx有一段时间,但一直也仅仅是看看Demo,没有真正的去写代码.由于本人仅仅是java的coder.还是半路出家的coder,编程基础太浅. 对于c++.lua也不懂.近期coco ...

  3. Android 4.3 系统裁剪——删除不使用的app及添加自己app

    删除不使用的apk 系统自带的app位置是在/android4.3/packages/apps 以下是一些APP作用分析: | |– BasicSmsReceiver | |– Bluetooth ( ...

  4. double和decimal的ToString("#.##")方法使用的是四舍五入;

    顺带提一下: 1. double和decimal的ToString("#.##")方法使用的是四舍五入: 2. 静态类System.Math下的Round(decimal d, i ...

  5. msiexec

    msiexec: runCmd = new String[]{ "msiexec", "/i", exeName, "/quiet", &q ...

  6. c# 引用ConfigurationManager 类

    c#添加了Configuration;后,竟然找不到 ConfigurationManager 这个类,后来才发现:虽然引用了using System.Configuration;这个包,但是还是不行 ...

  7. 织梦DedeCMS会员登录或退出后如何直接跳转到首页

    织梦dedecms默认情况下的会员登录后会直接跳转到会员中心,退出也是一样,但是如果我们想让会员登录后直接跳转到首页,那该如何实现呢? 经过我们的研究,已经找到解决办法,下面是详细的修改步骤: 首先在 ...

  8. 概率编程:《贝叶斯方法概率编程与贝叶斯推断》中文PDF+英文PDF+代码

    贝叶斯推理的方法非常自然和极其强大.然而,大多数图书讨论贝叶斯推理,依赖于非常复杂的数学分析和人工的例子,使没有强大数学背景的人无法接触.<贝叶斯方法概率编程与贝叶斯推断>从编程.计算的角 ...

  9. 初尝Perl -- 使用aapt给apk软件包批量重命名

    不知道什么是Perl猛戳这个链接 http://zh.wikipedia.org/wiki/Perl     任务:                 随着手机/平板的各方面性能的不断发展(CPU,内存 ...

  10. 【C/C++】链表的理解与使用

    转载自:http://blog.csdn.NET/xubin341719/article/details/7091583/ 最近不是太忙,整理些东西,工作也许用得到. 1,为什么要用到链表 数组作为存 ...