【学习总结】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把误删的文件恢复到最新版本:

posted @ 2018-10-30 17:04  anliux  阅读(318)  评论(0编辑  收藏  举报