Git

git使用

Posted by roger on October 26, 2019

git

0.需要注意的点

  1. 基于git管理来看,工作区,暂存区,版本仓库实质上是管理的修改,暂存和提交的差异记录。”不能说提交后暂存区就没了”,这比较容易引起偏差

  2. 廖雪峰讲的概念有误

    stage 并不是 working directory 和 HEAD 之间的 临时枢纽,不能按照 “内存”、”购物车” 来理解 stage,否则你会很难理解 git diff、git diff –staged

    stage 中拥有着 和 working directory 中一模一样 的 目录结构、文件内容

  3. 当从版本库或暂存区回退到工作区时,工作区新增的文件(也就是版本库和暂存区没有的文件)不会被删除。

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:切换分支和恢复暂存区的文件

  1. git checkout <branch>

    会让版本库的指针指向<branch>分支的HEAD,同时让工作区和暂存区同步到HEAD,注意:原来工作区的修改会被保留

  2. git checkout -b <new_branch>

    会创建分支并让版本库的指针指向该分支

  3. git checkout [–detach] <commit>

    可以让版本库的HEAD指向<commit>,同时让工作区和暂存区同步到HEAD,注意:原来工作区的修改会被保留

  4. git checkout <file_name>

    可以让暂存区的特定文件覆盖工作区,(如果是想暂存区文件全部覆盖工作区,可以git checkout .,注意:该方法不会删除暂存区没有工作区有的文件)

2.显示差异

git diff 详细显示工作区和暂存区的差异

git diff HEAD –filename 比较工作区和版本库的差异

git status 可以显示工作区和暂存区的差异与暂存区和版本库的差异

git log 显示版本库提交日志

3. git 出现:号

表示还有未显示的内容,可以继续按回车键查看,或者按q退出

参考:

git官网