简单使用:java
能够将git branch new_branch
和git checkout new_branch
两个命令合并成一个命令:git checkout -b new_branch
。这个命令的意思就是建立一个分支而且切换到这个分支上。
本地分支更名:git branch -m 原分支名 新分支名
这个过程当中,下一个版本会记录一个parent id
,这个parent id
就是前一个版本的commit id
。git
注意当咱们在dev
中更改文件以后,必定要先add
和commit
,否则那样就会和master
内容同步了,咱们须要的是在dev
中更改以后,在没有进行merge
以前,master
不会和dev
相同: 看下面的演示:bash
HEAD的含义: (在git reset HEAD test.txt
中使用过)架构
即以下表示:并发
若是咱们执行git checkout -b dev
,咱们就会建立一个dev
分支并指向新的分支。分布式
这是在master
分支的基础上,可是这个过程并非像SVN
同样会拷贝一份,而是只是建立一个指针dev
,会和master
指向了同一个提交。但此时HEAD指向的是dev
(当前分支)。高并发
查看HEAD文件的内容:ui
而后我在上图的基础上,若是我在dev
分支下进行了一次提交,图就会变成下面这样:spa
此时master
指向第3次提交,而dev
已经指向了第四次提交。指针
接下来,若是我将dev
上面的修改合并到master
上面 (在master
中操做),上面的图就会变成下面这样:
这种状况不会有冲突存在。
实战演示:
总结一下这种状况,就是直接从master
分支跳转到了最后的dev
修改的那个位置,至关于指针的跳转。
演示冲突:在master
中修改了test.txt
的第三行,在dev
中也修改了test.txt
中的第三行,因而合并的时候就会产生冲突:
上面的过程就是以下图的过程:
注意箭头往回指是由于后一个提交里面包含一个parent-id
指向前一个提交的commit-id
,前面已经说过。
注意观察master
分支中test.txt
文件的内容以及咱们将解决此次冲突(即咱们打算保存master
的修改而丢弃dev
的修改):
也就是说在fast-forward
模式下:
fast-forward
模式;-- no-ff
参数会禁用fast-forward
模式,这样就会多出一个commit - id
,也就是说在fast-forward
模式下面merge
不会多出一个commit-id
;git merge -- no-ff dev复制代码
git log --graph复制代码
关于fast-forward
模式和非fast-forward
模式下的少一次commit-id
和多一次commid-id
的图解:
咱们先看使用fast-forward
模式下的: (即合并的时候commit-id
和另外一个分支相同):
再看不使用fast-forward
模式:
Git的另一个强大之处在于能够回退到以前的任意一个版本:
主要看下面的命令:
git reset --hard HEAD^
, 日后回退1个版本;git reset --hard HEAD~3
,日后回退3个版本;git reset --hard commit-id
,直接回退到某个commit-id
;(若是当前在靠前面,就能够经过git log
查看);git log 获得 commit-id
怎么办呢?能够用git reflog
查看本身的操做日志;实战演示:
查看修改和提交日志:
下面演示怎么回退:
原文:Java架构笔记
免费Java高级资料须要本身领取,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G。
传送门: mp.weixin.qq.com/s/JzddfH-7y…