git
0.需要注意的点
-
基于git管理来看,工作区,暂存区,版本仓库实质上是管理的修改,暂存和提交的差异记录。”不能说提交后暂存区就没了”,这比较容易引起偏差
-
廖雪峰讲的概念有误
stage 并不是 working directory 和 HEAD 之间的 临时枢纽,不能按照 “内存”、”购物车” 来理解 stage,否则你会很难理解 git diff、git diff –staged
stage 中拥有着 和 working directory 中一模一样 的 目录结构、文件内容
-
当从版本库或暂存区回退到工作区时,工作区新增的文件(也就是版本库和暂存区没有的文件)不会被删除。
1.修改
git add 实际上是让工作区的内容同步到暂存区
git commit 实际上就是把暂存区的内容同步到版本库
git checkout
git reset <commit> 其实就是让版本仓库的内容同步到暂存区
git reset –hard <commit> 其实是让版本仓库的内容同步到暂存区和工作区,注意,这个时候工作区新增的文件不会被删除
1.1 reset
git reset –soft HEAD~ 只是将版本仓库的tree的指针指向HEAD的父节点,而不会改变暂存区和工作区
git reset –mixed HEAD~ 在版本库回退上一版本的同时,让版本库内容同步到暂存区
git reset –hard HEAD^ 在版本库回退上一版本的同时,让版本库内容同步到暂存区和工作区
git reset HEAD 实际上就是与git reset –mixed HEAD^相同
1.2 通过路径来reset
git reset file.txt
(这其实是git reset --mixed HEAD file.txt
的简写形式)会让file.txt
从HEAD复制到暂存区中。正好与git add
相反
git reset HEAD^ file.txt 会将HEAD^的file.txt覆盖暂存区
1.3 checkout-index
git checkout-index -a 让将暂存区的文件写入工作区,注意:不会覆盖工作区的文件,即只会写入暂存区有而工作区没有的文件
git checkout-index -a -f 让工作区被暂存区文件全部覆盖,注意:该方法不会删除暂存区没有而工作区有的文件
1.4 checkout:切换分支和恢复暂存区的文件
-
git checkout <branch>
会让版本库的指针指向<branch>分支的HEAD,同时让工作区和暂存区同步到HEAD,注意:原来工作区的修改会被保留
-
git checkout -b <new_branch>
会创建分支并让版本库的指针指向该分支
-
git checkout [–detach] <commit>
可以让版本库的HEAD指向<commit>,同时让工作区和暂存区同步到HEAD,注意:原来工作区的修改会被保留
-
git checkout <file_name>
可以让暂存区的特定文件覆盖工作区,(如果是想暂存区文件全部覆盖工作区,可以
git checkout .
,注意:该方法不会删除暂存区没有工作区有的文件)
2.显示差异
git diff 详细显示工作区和暂存区的差异
git diff HEAD –filename 比较工作区和版本库的差异
git status 可以显示工作区和暂存区的差异与暂存区和版本库的差异
git log 显示版本库提交日志
3. git 出现:号
表示还有未显示的内容,可以继续按回车键查看,或者按q退出
参考: