git版本控制以及分支管理--一起乘坐时光机

  • 四.深度剖析
    • 一.版本控制---时光机穿梭
      • 1.熟悉版本
      • 2.版本回退
      • 3.管理修改
        • 1.管理修改以及理解工作的原理
        • 2.撤销修改的内容
        • 3.删除文件
    • 二.分支管理
      • 1.分支基本操作
      • 2.解决分支冲突
      • 3.分支合并管理
      • 4.解决bug分支

四.深度剖析

何为版本控制:git的传奇之处

每当我们对我们的文件做一项操作时,但是我们又想回到之前的操作,那么这个时候已经过了好久,怎么办,机器控制版本的时代到来,git就能够精妙的控制文件的每次改动。就像下图这样

版本 文件名 用户 说明 日期
1 service.doc 张三 删除了软件服务条款5 7/12 10:38
2 service.doc 张三 增加了License人数限制 7/12 18:09
3 service.doc 李四 财务部门调整了合同金额 7/13 9:51
4 service.doc 张三 延长了免费升级周期 7/14 15:17

我们在上文已经知道git简单的日常操作流程,那么接下来就开始进入git的不平凡之处。

一.版本控制—时光机穿梭

1.熟悉版本

git可以记录我们每次的修改,当我们修改了文件,git就会有一条记录,记录我们的修改,以便于我们在旅游出差回来还能够找到修改的内容。

命令一:

$git status  //查看当前的仓库的状态 可以查询我们的修改

但是git status 并不能够查看我们修改的内容 这个时候就需要 git diff

$git diff //查看修改的内容

我们知道修改的内容之后我们就可以根据需要看是否提交或者是否修改

$ git add Testthree.txt //提交当前的文件到暂存区

提交到本地仓库

$ git commit -m "我的第三次测试"

2.版本回退

我们刚刚提交的内容,也许我们不会记得我们修改的什么内容,这个时候就需要我们查看我们的修改历史,git log 可以查看最近到最远的提交日志

$ git log  //

$ git log --pretty=oneline  //更清晰的查看

注:如果commit(提交)比较多,git log 的内容就会比较多;当满屏放不下,就会显示冒号,回车(往下滚一行)、空格(往下滚一页)可以继续查看剩余内容;退出:英文状态下 按 q 可以退出git log 状态。

版本回退

​ 首先我们要知道我们当前所处的版本,HEAD表示的是当前的版本,上一个版本就是 HEAD,上上个版本就是HEAD^,前面的一百个版本就是HEAD~100

回退命令

$ git reset --hard HEAD^  //回退到上一个版本

回退之后我们可以利用cat +当前文件夹 查看内容是否回退

$ cat readme.txt //查看当前的内容

利用 git log 查询当前的所处版本 会发现 没有了我们修改之前所处的版本,回不去了!!!!

那是不可能滴

只要命令行没有关掉,我们可以找到 当时的版本的 提交id commit -id

我们就可以指定版本回到那个位置

$  git reset --hard 263395  //后面的263395是版本号 可以输入全部 也可以输入前几位,前提版本少可以找的到
HEAD is now at 2633959 你好

我们可以i看到已经回退到我们当时所处的版本,所以git 可以让我们在时空里来回穿梭。

HEAD 指向示意图
修改之后

wait wait 如果我们关掉了命令行,想要回到过去怎么搞 ??? !!

查看 命令历史

$ git reflog

look 以上就是我们的提交的命令历史

我们乘着时光机又回来了。

3.管理修改

1.管理修改以及理解工作的原理
  • 小前提 --理解什么是暂存区以及工作区

  • 工作区:电脑上你的目录文件区域 such as

  • 版本库:

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

当我们修改工作区的文件,然后add 到暂存区 ,等到修改的文件足够多的时候,一并提交。

提交 并且查看当前状态

$ git commit -m "understand how stage works"  //提交当前的修改
$ git status  //查看是否有需要提交的修改状态
On branch master
nothing to commit, working tree clean  //表示干净嘞很 没啥要提交的

注意----

commit 我们可以看到 我们提交的只是暂存区的提交内容,若是多次修改,那么需要多次 add . 把修改的内容添加到暂存区

方便我们一次提交

2.撤销修改的内容

场景一

  • 自修改后还没有被放到暂存区
$ git checkout -- readme.txt  //git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销

撤回修改就撤回到和版本库一摸一样的状态

  • 已经添加到暂存区后,又作了修改

    销修改就回到添加到暂存区后的状态。

总而言之就是让这个文件回到最近一次的git commit 或者 git add 的状态

场景二

改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改

$ git reset HEAD readme.txt  //第一步就是 把暂存区的修改回退到工作区

然后丢弃工作区的修改 利用场景一。

3.删除文件
$ rm test.txt  //删除名字为 test.txt 的文件

版本库会询问你是否真的要删除

$ git rm test.txt   //删除
rm 'test.txt'$ git commit -m "remove test.txt"  //是真的 我都提交了
[master d46f35e] remove test.txt1 file changed, 1 deletion(-)delete mode 100644 test.txt
  • 删除错了 我giao

    版本库中还有,可以轻松恢复

    $ git checkout -- test.txt
    

    git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

    注:从来没有添加到版本库的文件是不能够被恢复

二.分支管理

每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

1.分支基本操作

创建分支命令

$git branch (branchname)  //创建分支 (1)
$ git checkout -b dev    //创建分支并且切换到dev的分支  (2)
Switched to a new branch 'dev'

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev
$ git checkout dev

切换分支命令:

$git checkout (branchname)

当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。

合并分支命令:

$git merge (合并分支的名称) 依据当前的所处分支然后合另外的分支到当前的分支

查看当前的分支 带星号表示当前所处的分支

$git branch

删除分支

git branch -d <name>

2.解决分支冲突

当我们在新的分支里面修改一些东西,然后切换分支之后我们又在文件里面修改了一些内容,那么这两个分支就会发生冲突。

当 master和feature 都有新的修改内容,

尝试合并分支

$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.  //发现冲突

找到发生冲突的文件,我们也可以使用

$ git status  //查看冲突的文件

我们直接到冲突的文件之后会发现

<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1   //

Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,我们修改后保存:再提交

此时的状态就是这个样子的。

我们可以用查看分支合并图

git log --graph

删除分支,工作完成

$ git branch -d feature1
Deleted branch feature1 (was 14096d0).

3.分支合并管理

Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息,不能够显示我们是否合并了分支。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.readme.txt | 1 +1 file changed, 1 insertion(+)

合并之后我们可以利用

$ git log --graph --pretty=oneline --abbrev-commit   //查看分支合并图
*   commit cf20d935394b7243903aa054d8f59c5990682ee6 (HEAD -> master)
|\  Merge: b661434 0cc4463
| | Author: wangyunfei <2279567793@qq.com>
| | Date:   Sat Mar 19 11:12:26 2022 +0800
| |
| |     禁用参数Fast forward
| |
| * commit 0cc446372e7d91187677d7463015154b031f3cf1 (test)
|/  Author: wangyunfei <2279567793@qq.com>
|   Date:   Sat Mar 19 11:10:51 2022 +0800
|
|       添加新的commit
|
*   commit b6614341f8862d44b170952165caaed4eb3c7304 (dev)
|\  Merge: 001eefc 361b6fd
| | Author: wangyunfei <2279567793@qq.com>
| | Date:   Sat Mar 19 10:54:29 2022 +0800
| |
| |     解决冲突并且提交修改

如图所示,分支合并,能够被我们捕捉。

日常开发中我们要遵循的分支管理

1.master非常稳定,仅仅用来发布新版本,不能再这个上面工作

2.创建dev分支,在这个上面进行工作,然后把工作内容合并到master上面

3.每个人都在自己的分支上面工作,时不时的忘dev分支上面合并。

经典的分支合作。

4.解决bug分支

需要我们修复bug的时候,我们不能停下手中当前的分支,当前的工作没有提交怎么搞。工作做到一半!!!!

$ git status
On branch dev
Changes to be committed:  //发现我们的工作还没提交

储存我们的工作:

$ git stash
Saved working directory and index state WIP on dev: f52c633 add merge

可以再次 git status 查看会发现我们的工作区是干净的 简直不要太爽!

解决bug的时候,我们要明确bug的诞生位置,是在哪一个分支上面,在哪个上面就在哪个上面创建新的分支

$ git checkout master //切换分支
$ git checkout -b issue-101  //创建bug分支

修复bug 切换到master 分支,完成合并,删除分支

$ git add readme.txt   //修改之后添加到暂存区
$ git commit -m "fix bug 101"  //提交修改到当前的分支
$ git switch master //切换分支
$ git merge --no-ff -m "merged bug fix 101" issue-101 //合并bug 分支到当前的分支上面

bug 解决回到工作分支继续搞工作

$ git switch dev //切换到dev 工作分支
$ git status //查看分支状态
On branch dev
nothing to commit, working tree clean   //哎呦 我giao 干净嘞很,这可咋办

利用git stash list 查看工作现场

$ git stash list
stash@{0}: WIP on dev: f52c633 add merge

两种恢复方式:

$git stash apply

恢复,但是恢复后,stash内容并不删除 $ git stash list //可以查询到内容

$git stash pop

恢复的同时把stash内容也删了 删除之后 $ git stash list //查看看不到任何的内容了

注意:你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:

$ git stash apply stash@{0}

偷偷说一句:

在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。

git版本控制以及分支管理相关推荐

  1. Git版本控制__分支管理

    文章目录 Git基本操作 1. git 两大特点 2. 安装与配置 3. 创建一个版本库 4.版本创建与回退 4.1 使用 4.2 工作区和版本库 工作区 ( Working Directory ) ...

  2. Git 远程仓库分支管理

    目录 目录 速查表 关联远程代码仓库 克隆远程仓库 分支管理 创建分支 切换分支 合并分支 删除分支 解决冲突 速查表 指令 作用 git branch 查看分支 git branch newBran ...

  3. Django实战技巧(2)-git代码仓分支管理技巧

    Django(1)-简介 Django(2)-创建项目及默认项目目录结构介绍 Django(3)-配置文件详解 Django(4)-URL和视图 Django(5)-路由配置实例 Django(6)- ...

  4. Git本地库版本控制和分支管理

    版本控制 ①git log [parameter] 查看版本记录(使用Hash值指向相关信息,只显示之前的版本) 常用参数: –pretty = oneline (或 --oneline,缩短Hash ...

  5. Git配置、版本控制与分支管理

    文章目录 一.创建版本库 1. 配置git环境 二.时光机穿梭 1. 版本回退 2. 撤销修改 3. 删除文件 三.分支管理 1. 创建与合并分支 2. 解决冲突 3. Bug分支 4. 多人协作 参 ...

  6. Git由浅入深之分支管理

    几乎所有的版本控制系统都以分支的方式进行操作,分支是独立于项目主线的一条支线,我们可以在不影响主线代码的情况下,在分支下进行工作.对于传统的一些版本控制工具来说,我们通常需要花费比较多的时间拷贝主线代 ...

  7. Git远程和分支管理

    一.远程 Git是分布式版本控制系统,最重要的优点就是远程仓库托管代码.不用自己搭建一个服务器,在github上面注册一个账户就可免费获取远程仓库. 首先需要先在github上面创建仓库.创建步骤百度 ...

  8. Git怎样做分支管理

    查看全文 http://www.taodudu.cc/news/show-3787419.html 相关文章: git分支规范 实际项目中如何使用Git做分支管理 多人开发 Git 分支管理详解 gi ...

  9. (GIT)代码分支管理策略

    一.我们采用的管理策略(分支开发主干发布) 1. 主分支(master),用于发布,每次发布时打一个(tag),不做任何开发使用 拉取源:无 合并目标:无 修改:不允许 生命周期:持续 2. 开发分支 ...

最新文章

  1. Oracle逻辑结构学习笔记
  2. case when完成不同条件的显示
  3. linux-``反引号
  4. js倒计时天时分秒php,JS制作分秒倒计时器
  5. pandas之shift()函数
  6. JavaScript(JS)中与正则表达式有关的方法介绍
  7. 200道物理学难题——038蚱蜢跃树
  8. 一步一步写算法(之图添加和删除)
  9. 遗传算法中适值函数的标定与大变异算法
  10. 计算机监控防误,计算机监控防误操作系统专利_专利申请于2007-10-25_专利查询 - 天眼查...
  11. 最新泛微java面试题及答案
  12. JPM Coin— 货币非国家化的开端 | TokenInsight
  13. zoj 3351 Bloodsucker
  14. 题目1035:找出直系亲属 树
  15. 双纤网速叠加+GS105E实现单线三用+AC86+68组网Aimesh实现无线漫游
  16. 北航计算机控制系统实验报告,北航计算机控制系统实验报告详细分解.doc
  17. 学生成绩管理系统(简单版)
  18. Twebbrowser从内存中加载页面
  19. mysql 家谱树查询_GitHub - chenwei/FamilyTreeView: 家谱树绘制Demo
  20. Microsoft TODO快捷键

热门文章

  1. oracle中转换函数,Oracle中的转换函数
  2. 谈谈对高内聚低耦合的认识
  3. 二分图的判定最大匹配
  4. linux系统内存dump机制介绍(一)--kdump
  5. 「Python条件结构」使用if结构实现密码验证
  6. 25章 SPI—读写串行FLASH
  7. 搞定调度算法只需三分钟
  8. opencv python考勤_GitHub - liqq1228/python-opencv: 基于python opencv人脸识别的员工考勤系统...
  9. SQL上机练习题目及答案
  10. RHEL 7.8 64bit MYSQL linux-generic 8.0.20 初始化安装