Git(二)

参考来源 https://www.liaoxuefeng.com

前言常识:

1.git没有中央服务器的概念,只是为了合并代码方便而已。

2.windows平台使用linux、unix工具的时候,需要cygwin这样的模拟环境。 git也需要。

3.Unix的哲学是“没有消息就是好消息

4.在Git中,用HEAD表示当前版本  上一个版本就是HEAD^      HEAD指针指向的是当前 

5.暂存区的内容才会被提交 

一:版本回退

1.git log   或者  git log --pretty=oneline :  查看commit记录

   git status:描述的是工作目录和暂存区的情况

2.版本回退:回退到哪次commit。  git reset --hard HEAD^     执行此命令后,然后执行 git log 最新的那次commit就看不到了!    所以通过 git log 查找commit ID 是靠不住的,才有了下面的 git reflog

   补充:HEAD表示当前版本 上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

  版本穿梭: git reset --hard 3628164(commit的ID)

        所以只要知道commit的ID,我们就能任意的穿梭版本。 那么我们如何知道commit的ID呢?  用 git reflog 

二: working directory和Stage   

三:撤销

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

一种是readme.txt自修改后还没有被放到暂存区(暂存区属于版本库哦),现在,撤销修改就回到和版本库一模一样的状态;

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

总之,就是让这个文件回到最近一次 git commitgit add 时的状态。

用命令  git reset HEAD file 可以把暂存区的修改撤销掉(unstage),重新放回工作区

git reset 命令既可以回退版本,也可以把暂存区的修改回退到工作区。

总结:

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令 git checkout -- file(没有执行add哦   还在工作区)

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令 git reset HEAD file (撤销add 此时在暂存区),就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。(让版本库指针回退  此时在本地仓库)

四:删除文件(本地仓库): 从版本库中删除文件

1. git rm test.txt 相当于 rm test.txt  +  git add test.txt
    git commit -m "remove test.txt"   提交到版本库

2.删除错了 git checkout -- test.txt

  文件删除后如果执行add,添加到了暂存区,git checkout -- test.txt是无法执行的。(参照上面第三节场景二)

原文地址:https://www.cnblogs.com/njqa/p/7340008.html