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. main()函数的形参

    main函数中的第一个参数argc代表的是向main函数传递的参数个数,第二个参数argv数组代表执行的程序名称和执行程序时输入的参数 #include <stdio.h> int mai ...

  2. 1193 Eason

    Eason Acceteped : 57   Submit : 129 Time Limit : 1000 MS   Memory Limit : 65536 KB Description 题目描述 ...

  3. 【转】C# HttpWebRequest提交数据方式

    [转]C# HttpWebRequest提交数据方式 HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于Sy ...

  4. [Recompose] Refactor React Render Props to Streaming Props with RxJS and Recompose

    This lesson takes the concept of render props and migrates it over to streaming props by keeping the ...

  5. 已知二叉树的中序序列为DBGEAFC,后序序列为DGEBFCA,给出相应的二叉树

    面对这种问题时我们该怎么解决? 今天写数据结构题.发现了一道总是碰见问题的题在这里我写了一种求解方法我自己称它为分层递归求解. 第一步通过观察我们知道后序遍历时最后一个是根节点A 在中序序列中A的左边 ...

  6. Create the Project

    https://docs.microsoft.com/en-us/aspnet/web-forms/overview/getting-started/getting-started-with-aspn ...

  7. Spring MVC 返回视图时添加的模型数据------POJO

    POJO(Plain Old Java Objects)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称. 使用POJO名称是为了避免和 EJB混淆起来, 而且简 ...

  8. 简单STL笔记

    想了好久,还是把自己了解的先整理一下吧,毕竟老是忘,这里主要简单介绍三种容器 set,queue,vector,以及栈 stack,队列queue 的简单用法.一.set 在set中,效率比vecto ...

  9. CentOS上搭建Tomcat环境并配置服务自启动

    下载安装JDK 卸载原装的OpenJDK(如果有) # 查看是否安装Java java -version # 查看Java的安装包信息 rpm -qa | grep java # 卸载原装Java,& ...

  10. IDEA 开发工具在POM.XML文件中增加依赖

    在POM.XML 中使用快捷键 ALT+INSERT 选择第一个,输入关键字即可 选择版本,确认,ok