Git分支和版本回退
一、分支
1、分支简单介绍
简单使用:
可以将
git branch new_branch
和git checkout new_branch
两个命令合并成一个命令:git checkout -b new_branch
。这个命令的意思就是创建一个分支并且切换到这个分支上。
本地分支改名:git branch -m 原分支名 新分支名
2、合并分支merge
这个过程中,下一个版本会记录一个parent id
,这个parent id
就是前一个版本的commit id
。
注意当我们在dev
中更改文件之后,一定要先add
和commit
,不然那样就会和master
内容同步了,我们需要的是在dev
中更改之后,在没有进行merge
之前,master
不会和dev
相同: 看下面的演示:
3、快进fast forward
HEAD的含义: (在git reset HEAD test.txt
中使用过)
- HEAD指向的是当前分支;
- master是指向提交(本质上只的是当前的提交);
即如下表示:
如果我们执行git checkout -b dev
,我们就会创建一个dev
分支并指向新的分支。
这是在master
分支的基础上,但是这个过程并不是像SVN
一样会拷贝一份,而是只是创建一个指针dev
,会和master
指向了同一个提交。但此时HEAD指向的是dev
(当前分支)。
查看HEAD文件的内容:
然后我在上图的基础上,如果我在dev
分支下进行了一次提交,图就会变成下面这样:
此时master
指向第3次提交,而dev
已经指向了第四次提交。
接下来,如果我将dev
上面的修改合并到master
上面 (在master
中操作),上面的图就会变成下面这样:
这种情况不会有冲突存在。
实战演示:
总结一下这种情况,就是直接从master
分支跳转到了最后的dev
修改的那个位置,相当于指针的跳转。
4、master和dev同时修改同一文件同一位置产生冲突
演示冲突:在master
中修改了test.txt
的第三行,在dev
中也修改了test.txt
中的第三行,于是合并的时候就会产生冲突:
上面的过程就是如下图的过程:
注意箭头往回指是因为后一个提交里面包含一个
parent-id
指向前一个提交的commit-id
,前面已经说过。
注意观察master
分支中test.txt
文件的内容以及我们将解决这次冲突(即我们打算保存master
的修改而丢弃dev
的修改):
5、深入fast-forward模式
也就是说在fast-forward
模式下:
- 如果可能(合并时没有冲突),那么Git就会采用
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的另外一个强大之处在于可以回退到之前的任意一个版本:
主要看下面的命令:
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。
传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q
Git分支和版本回退的更多相关文章
- [原]git的使用(一)---建立本地仓库、add和commit、status和git diff、版本回退使用git reset
在window下已经安装了git的环境 1.建立本地仓库 mkdir test #建立test目录 cd test #进入目录 git init # ...
- Git使用:版本回退
在Git中,我们可以用 git log命令查看我们修改的历史记录 C:\Users\Administrator\Documents\GitHub\learngit [master]> git l ...
- Git新建分支,分支合并,版本回退详解
一.git基本命令 git拉取仓库代码 #拉取master代码 git clone git仓库地址 #拉取分支代码 git clone -b 分支名称 git仓库地址 2.git添加代码到本地仓库 g ...
- Git秘籍:在 Git 中进行版本回退
导读 在这篇文章中,你将学到如何查看项目中的历史版本,如何进行版本回退,以及如何创建 Git 分支以便你可以大胆尝试而不会出现问题.快来试试吧. 在你的 Git 项目的历史中,你的位置就像是摇滚专辑中 ...
- Git 系列(四):在 Git 中进行版本回退
在这篇文章中,你将学到如何查看项目中的历史版本,如何进行版本回退,以及如何创建 Git 分支以便你可以大胆尝试而不会出现问题. 在你的 Git 项目的历史中,你的位置就像是摇滚专辑中的一个片段,由一个 ...
- 记录一次Git远程仓库版本回退
操作过程: 首先查看远程仓库版本,如下图所见,最近一次提交为2018-03-19 22:16:25 第一步:使用git log命令查看历史提交记录,选择要回退的版本号,commit后面一串字符,这里我 ...
- 【Git学习笔记】初始化Git仓库和版本回退
学习地址 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 什么是版本库呢?版本库又 ...
- git中的版本回退
git版本回退有两种情况,一种是从本地版本库中(head区)回退到某个版本,可以用命令 git reset --hard head^ 或git reset --hard head~x ,head指的是 ...
- Git教程之版本回退(4)
现在,我们已经学会了修改文件,然后把修改提交到Git版本库,现在再次修改readme.txt文件如下:
随机推荐
- 数据库操作之DBUtils
概述 DBUtils是Java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码. DBUtils三个核心功能介绍 QueryRunne ...
- 8-剑指offer: 替换空格
题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 代码: c ...
- 浅析struct device结构体
device结构体:设备驱动模型中的基础结构体之一 struct device { /*设备所依附的父设备 大多数情况下,这样的设备是某种总线或主控制器 如果该成员变量的值为NULL,表示当前设备是一 ...
- ssh config 配置
一个打开新连接免密码的小技巧 Host * ControlMaster auto ControlPath ~/.ssh/master-%r@%h:%p
- 虚拟机安装后配置IP地址
BOOTPROTO=static #启动的方式,dhcp表示自动获取,static表示静态ONBOOT=yes #是否开机启动,yes表示开机启动IPADDR #设置IP,和vmware在同 ...
- 04-人脸识别-triplets loss 的解释(转载)
转载至: https://blog.csdn.net/tangwei2014/article/details/46788025 下面是内容: [前言] 最近,learning to rank 的思想逐 ...
- 20190922 「HZOJ NOIP2019 Round #7」20190922模拟
综述 这次是USACO2019JAN Gold的题目. \(\mathrm{Cow Poetry}\) 题解 因为每句诗的长度一定是\(k\),所以自然而然想到背包. 设\(opt[i][j]\)代表 ...
- 洛谷 P1016 旅行者的预算
传送门 感觉自己连点生活常识都没有,竟然连油用过之后要减去都不知道,这种贪心模拟题都做不出来--思路在代码里,我菜死了 思路&&代码 //看题解过的..一点都没有成就感 #includ ...
- [LeetCode] 893. Groups of Special-Equivalent Strings 特殊字符串的群组
You are given an array A of strings. Two strings S and T are special-equivalent if after any number ...
- QSS文件美化界面无效
问题描述: 同样的qss内容,内置有效,写进qss文件加载无效. 搜寻.........很多网友的经理是qss文件编码和qt文本编辑器的属性........而我怎么尝试,怎么失败. 解决方案: 从fi ...