参考来源: 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 commit
或git 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是无法执行的。(参照上面第三节场景二)