zoukankan      html  css  js  c++  java
  • git代码管理(4)——代码版本管理

    一、版本管理介绍

    通过之前的学习,我们基本学会了Git是怎么管理代码仓库的。之后在日常使用中我们对代码的修改添加删除,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

    二、文件修改测试

    下面我将newfile.txt文件修改了3次,每次修改完成要“git add” 然后 “git commit” 来提交每次的修改,进行记录

     

    三、版本历史查看

    1. git log 命令查看:

    ** 显示了我们每次commit提交记录,并且每次有commit id,有提交的时间及描述

    ** 你看到的一大串类似1094adb...的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了

    ** Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本

     

    2. git log --pretty=oneline 命令查看简洁版:

    四、版本回退

    1. 回退命令

    回退命令:git reset

    上一个版本:HEAD^

    上上一个版本:HEAD^^

    往上100个版本:写100个 ^ 数不过来,所以写成HEAD~100

    $ git reset --hard HEAD^
    HEAD is now at c6ddc13 two add
    
    $ cat newfile.txt
    test
    one
    two
    
    $ git log
    commit c6ddc13fb9e1d764d95d3cd5e92d02d0108c187c (HEAD -> master)
    Author: Asteven-zn <964038167@qq.com>
    Date:   Thu Apr 15 16:20:37 2021 +0800
    
        two add
    
    commit 72c6c812cc683ebff94b7d207071c19878692be3
    Author: Asteven-zn <964038167@qq.com>
    Date:   Thu Apr 15 16:19:01 2021 +0800
    
        one add
    
    commit 31e61e7bb130005eec23e8e04232f5289e19cea4 (origin/master)
    Author: Asteven-zn <964038167@qq.com>
    Date:   Thu Apr 15 15:07:02 2021 +0800
    
        repotest push file
    

    2. 找回某个版本

    通过上面的回退命令,我们已经回到了以前的版本,也可以回到回退前的版本或者某个版本,这个时候就要用到commit id了

    2.1 git reflog命令:记录每一次每一个操作,找回要切换的对应版本commit id

    2.2 通过上面命令,通过commit时的描述“three add”,找到了第三步commit id “0355e6b”

    2.3 于是就可以指定回到未来的某个版本

      

    四、git管理修改

    1. Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。

    2. 你会问,什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。

    3. 每次修改,需要用 git add 到暂存区,让后在commit提交到版本库,如果修改没有用git add 把文件存到暂存区,那即使执行了 git commit 命令,那修改也不会提交到版本库

    修改后的文件和版本库中的文件做对比,可以用如下命令:

    $ git diff HEAD -- filename
    

    五、撤销修改

    假设我们对工作区的文件进行了修改,但是修改后发现事错误的,可以用 git checkout 撤销修改。

    ** git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

    撤销分了以下情况:

    1. 自修改后还没有被放到暂存区,现在撤销修改就回到和版本库一模一样的状态

    git checkout -- filename

    2. 已经添加到暂存区后,又作了修改,现在撤销修改就回到添加到暂存区后的状态。

    git checkout -- filename
    

    3. 已经添加到暂存区,在commit之前,可以把暂存区的修改撤销掉(unstage),重新放回工作区,再撤销工作区的修改

    git reset HEAD filename
    ## 要用git status查看一下,现在暂存区是干净的,工作区有修改,所以要执行撤销工作区的修改
    git checkout -- filename

    git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。 

    4. 假设不但改错了东西,还从暂存区提交到了版本库

    ** 可以回退到上一个版本。不过,这是有条件的,就是你还没有把自己的本地版本库推送到远程。

    $ git reset --head HEAD^

    ** 一旦你把stupid boss提交推送到远程版本库,你就真的惨了……

    六、删除文件

    在Git中,删除也是一个修改操作

    1. 在工作区通过本地文件管理器删除文件

    $ rm test.txt

    ## 这只是删除了工作区的文件,此时工作区和版本库不一致了

    2. git status 命令查看哪些文件被删除了

    $ git status
    On branch master
    Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
    	deleted:    test.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

    3. 版本库删除文件

    $ git rm test.txt
    rm 'test.txt'
    
    $ git commit -m "remove test.txt"
    [master d46f35e] remove test.txt
     1 file changed, 1 deletion(-)
     delete mode 100644 test.txt 

    4. 恢复删除的文件

    另一种情况是删错了,因为删除也是修改,并且没有git add到版本库,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

    $ git checkout -- test.txt
    

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

    ** 从来没有被添加到版本库就被删除的文件,是无法恢复的!

  • 相关阅读:
    ELK原理以及一些处理难点分析
    mysql无法启动,Error: page 13476 log sequence number
    Linux lsattr命令
    mysql主从复制案例及小结
    Nagios
    iptables路由转发及控制
    DNS域名解析
    无法启动Print Spooler服务,错误代码1068,依赖服务或组件
    云计算虚拟化知识
    文件上传漏洞
  • 原文地址:https://www.cnblogs.com/cloudhere/p/14663538.html
Copyright © 2011-2022 走看看