• Git 版本管理


    应用情景1:添加文件(单个、多个、目录)到Git版本库,提交一个版本快照。

    应用情景2:穿越历史回到过去,版本回退,从当前版本回退到之前提交过的某个版本上。

    应用情景3:穿越历史过头了,版本回退多了,目的时间是2000年,结果硬是穿到了1900年,没办法,又得从1900年穿越到"未来"的2000年。

    情景1:

    假设有一个目录 work ,里面三个文件:file1、file2、file3:

    git add work/file1    # 添加单个文件到版本库
    git add work/file1 work/file2 work/file3    # 添加多个文件到版本库
    git add work/    # 添加整个目录到版本库
    git add .    # 添加所有文件到版本库(.gitignore忽略的文件除外)
    git commit -m "add file1 file2 file3"    # 提交版本快照

    情景2:

    假设从项目开发到现在,一共提交了3个版本快照到Git版本库(3次有效的 git commit),分别是

    git commit -m "first commit"
    git commit -m "second commit"
    git commit -m "third commit"

    当前我们便是在最新版本(也就是最后一次提交的版本 "third commit")上进行开发,假设突然发现 "third commit" 版本存在重大问题,需要回退到"之前某个版本"上重新开发:

    # 第一步:找到之前提交的某个版本的 commit id
    git log  # 查看历史提交记录,里面有 commit id 信息
    git log --pretty=oneline  # 简化版的历史提交记录
    
    # commit id类似于 "5c6c438396bd9db4f24d299fc68f3150ec81b2f8" 这样的字符串
    
    # 根据 commit id 回退到指定版本
    git reset --hard 
    git reset --hard 5c6c438396bd9db4f24d299fc68f3150ec81b2f8  # 没必要写全,写前几位即可,但是要保证Git能够根据你提供的信息找到唯一的 commit id

    回退版本的另外一种方法:Git中有一个特殊的指针HEAD,永远指向当前版本,所以,可以用HEAD表示上一个版本HEAD^,上上个版本HEAD^^,向上几个版本就在HEAD后面加写几个^,当然,写太多的^不现实,所以向上100个版本可简写为HEAD~100,其它可依此类推。

    git reset --hard HEAD^  # 回退到上个版本
    git reset --hard HEAD^^  # 回退到上上个版本
    git reset --hard HEAD~100  # 回退到100个版本之前

    当前版本(third commit)回退到某个版本 (first commit)后,当前版本就是 first commit。查看历史提交记录,只会有 first commit 及之前的提交记录,就仿佛是 second commit 版本和 third commit 版本是一种幻觉,从来就没有提交过一样。

    情景3:

    在情景2中,回退到了 first commit 版本上后发现回退多了,此时想要再回到 "未来 second commit 版本" 或是 "未来 third commit 版本"

    # 版本可以自由回退穿越,但是所有的git操作都会被git按顺序记录下来,必然有某个命令可以查看历史操作。
    git reflog  # 查看历史操作记录,从中可以找到所有真实提交过的 commit id
    
    # 假设 second commit 版本 id 是 6w59a45,third commit 版本 id 是 8m334k2
    git reset --hard 6w59a45  # 从 first commit 版本穿越到"未来" second commit 版本
    git reset --hard 8m334k2  # 从 first commit 版本穿越到"未来" third commit 版本

    总结:所有提交过的版本都会被Git如实的记录下来并分配独一无二的 commit id,在版本间来回穿越的关键就是想方设法找到目的版本的 commit id。

  • 相关阅读:
    读《小明升职记》(四)
    读《小明升职记》(三)
    读《小明升职记》(二)
    读《小明升职记》(一)
    linux基础--命令使用
    centos7下postgresql数据库安装及配置
    markdown在typora的超方便的应用
    java实战(一)-------jdk环境在windows安装及配置
    java的概念了解(jdk,jre,jvm,javase,javaee,javame)
    命令ls按文件大小来排序
  • 原文地址:https://www.cnblogs.com/litmmp/p/5223325.html
Copyright © 2020-2023  润新知