zoukankan      html  css  js  c++  java
  • 【学习总结】Git学习-参考廖雪峰老师教程四-时光机穿梭

    学习总结之Git学习-总


    目录:

    一、Git简介
    二、安装Git
    三、创建版本库
    四、时光机穿梭
    五、远程仓库
    六、分支管理
    七、标签管理
    八、使用GitHub
    九、使用码云
    十、自定义Git
    期末总结


    四、时光机穿梭

    版本回退
    工作区和暂存区
    管理修改
    撤销修改
    删除文件

    git status:随时掌握工作区的状态,看文件是否被修改过
    git diff:如果git status显示有文件被修改过,用git diff查看修改内容

    ------------------------------------------

    4.0 穿梭机的必备基础知识

    4.0.1 修改readme.txt内容(注:廖老师依然用vi)


    1 - vi readme.txt 进入输入模式
    2 - 在输入模式下进行文本的编辑
    3 - 编辑完成后按 : 进入到底线命令模式,以在最底一行输入命令
    4 - 冒号:后输入wq保存并退出后回车,其中w保存文件,q退出程序



    4.0.2 查询git状态:git status

    下图表示:readme.txt被修改过了,但还没有准备提交的修改

    4.0.3 查询修改内容:git diff

    4.0.4 明确状态以后,提交修改,与提交新文件是相同的两步

    git add readme.txt - 把文件添加到仓库(没有任何输出)

    git status - 再次查询git状态,确保正确

    git commit -m "add distributed" - 提交到仓库

    git status - 随时查询git状态是否正确

    ------------------------------------------

    4.1 版本回退

    < commit-head-存盘复活点移动 >

    4.1.0 commit - “BOSS关复活点”

    打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。
    Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit,以防万一可以从commit点复活

    比如:再次修改一版readme.txt文件后commit

    Git is a distributed version control system.
    Git is free software distributed under the GPL.

    之后add并commit新一版的readme文件

    • 注:此时共有三个版本的readme提交了

    4.1.1 “HEAD”指向的版本就是当前版本,使用命令git reset --hard commit_id在历史版本之间穿梭。

    *注:版本号没必要写全,前几位就可以了,Git会自动去找。但也别写太短以免混淆。

    Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD的指向改变了

    • $ git reset --hard HEAD^

    head - 当前版本
    head^ - 回退一个版本
    head^^ - 回退两个版本
    head~100 - 回退100个版本。。
    (此次head貌似全大写或全小写均可)

    比如:回退到<上一个版本>(git log - 命令查看历史版本)

    比如:根据<版本号>回到最新版本(git reflog - 查看历史命令)

    • 注意:<只看不编辑文本>时用命令cat ----学到了,哈哈~

    4.1.2 git log - 查看提交历史,以便确定要回退到哪个版本(从近到远的最新记录三次)。

    $ git log --pretty=oneline - 简化信息

    4.1.3 git reflog - 查看命令历史,以便确定要回到未来的哪个版本

    ------------------------------------------

    4.2 工作区和暂存区

    < 理解add&工作区->暂存区 vs commit&master分支 >

    工作区(Working Directory):本地电脑能看到的目录,文件夹啥的 - 比如本例中的“learngit”文件夹

    版本库(Repository):包含了stage和master分支 - 比如本例中的“.git”就是版本库

    stage(或叫index):暂存区
    master:自动建立的分支,或称默认分支,有一个指向master的指针head

    把文件往Git版本库里添加的时候,是分两步执行的:

    git add - 把文件修改添加到暂存区stage;
    git commit - 把暂存区的所有内容提交到当前分支(比如master)

    例子一枚:::

    4.2.1 修改readme内容并新建文本文件“LICENSE”

    新建文件LICENSE就直接用vi命令新建(看demo视频里LICENSE后面没有加后缀,我也不加试试):


    (并且没有产生readme.txt.bak好像叫这个名的莫名其妙文件)

    4.2.2 查看状态并上传


    Git非常清楚地告诉我们,readme.txt被修改了,而LICENSE还从来没有被添加过,所以它的状态是Untracked

    两次add之后的状态:

    • git add命令实际上就是把要提交的所有修改放到暂存区(Stage)
    • 然后,执行git commit就可以一次性把暂存区的所有修改提交到分支

    之后commit:

    • 一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的

    ------------------------------------------

    4.3 管理修改

    < git - 跟踪修改的理解 >

    4.3.1 第一次修改 -> git add -> 第二次修改 -> git commit :这样只commit了第一次修改

    • 看评论区说这个例子举得不太切合,哈哈是有点不太贴合要表达的。。

    4.3.2 用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别

    • 虽然没说,但看加号和减号,应该是以工作区(即本地区)为本位比较的。

    4.3.3 第一次修改 -> git add -> 第二次修改 -> git add -> git commit - add完毕后,一并提交commit即可

    上接:再次add readme.txt文件并commit后,查diff发现没有diff..

    -----> 总体而言,本小节确实比较。。emmmm一言难尽可有可无似乎好像是这样。。

    ------------------------------------------

    4.4 撤销修改

    场景1:想直接丢弃工作区的修改 -- 用命令git checkout -- file
    场景2:想丢弃已add添加到暂存区的修改 -- 第一步用命令git reset HEAD <file>,就回到了场景1;第二步按场景1操作。
    场景3:想要撤销已commit提交到版本库的修改 -- 参考<版本回退>一节,前提是没有<推送到远程库(后面会学)>。

    4.4.1 场景一:工作区(本地修改)撤销

    命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

    一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
    一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

    总之,就是让这个文件回到最近一次git commit(版本库状态)或git add(stage区)时的状态

    • 验证如下:

    • 简言之:checkout file -- 使工作区(本地)回到版本库(stage & master),如果stage和master不一致,以stage为准。

    • PS : git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,分支管理中会再次遇到git checkout命令。

    4.4.2 场景二:add撤销-暂存区修改撤销

    用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区,之后按情景一撤销工作区修改
    (此处沿用刚刚add到暂存区的“my boss is stupid”版本)

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

    4.4.3 场景三:commit撤销-版本库修改撤销

    参考<版本回退>一节,前提是没有<推送到远程库(后面会学)>

    版本回退:
    git reset --hard HEAD^ - 回退到上一个版本
    git reset --hard commit_id - 在历史版本之间穿梭

    git log - 查看提交历史版本之类的
    git log --pretty=oneline - 简化信息 - 防刷屏一定要配合pretty=oneline食用!!!!

    demo如下:


    • 注:
      场景一,只涉及本地的回退,比较简单。
      场景二,stage暂存区撤回到本地,再用场景一的方法把本地的回退一下。
      场景三:已commit到版本库的撤回,这个就厉害了,经测试发现,这一个操作直接一夜回到解放前,也不用场景二那么麻烦再手动回退本地了。
      此处注意一下。打个比方,场景三是前几课学的,此处的重点是场景一和二,要记下,重点掌握一下。

    ------------------------------------------

    4.5 删除文件

    git rm - 用于删除一个文件
    git checkout -- filename 用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

    4.5.1 从本地的工作区删除一个已有的文件

    为demo我们先新建一个如:test.txt,add并commit后从本地删除

    此时版本库里已经有test.txt文件了,下一步从本地把test.txt文件删除

    4.5.2 选择一:确实要从版本库中删除该文件,那就用命令git rm filename删掉,并且git commit -m "comment"

    4.5.3 选择二:删错了,版本库里还有呢,git checkout -- filename把误删的文件恢复到最新版本:

  • 相关阅读:
    MTD NANDFLASH驱动相关知识介绍
    Java 根据当前时间获取明天、当前周的周五、当前月的最后一天
    使用 Spring 进行单元测试
    Centos下MySQL主从同步配置
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
    CentOS 7 配置静态IP
    mysql 配置 utf8 依然乱码
    rabbitMQ Connection timed out
    CentOS 7.0,启用iptables防火墙
    linux注销、关机、重启
  • 原文地址:https://www.cnblogs.com/anliux/p/9877922.html
Copyright © 2011-2022 走看看