玩转Git三剑客学习笔记

以下资料在官网都有,且有详细的说明。文档地址: https://git-scm.com/book/zh/v2

一、Git综述

1、VCS出现前的状况

  1. 用目录拷贝区别不同版本
  2. 公共文件容易被覆盖
  3. 成员沟通成本很高,代码集成效率低下
image

2、集中式VCS(SVN)

  1. 有集中的版本管理服务器
  2. 具备文件版本管理和分支管理能力
  3. 集成效率有明显地提高
  4. 客户端必须时刻和服务器相连
image

3、分布式VCS(Git、Github、Gitlab)

  1. 服务端和客户端都有完整的版本库
  2. 脱离服务端、客户端照样可以管理版本
  3. 查看历史和版本比较等多数操作,都不需要访问服务器,比集中式VCS更能提高版本管理效率
image

4、Git的特点

  1. 最优的存储能力
  2. 非凡的性能
  3. 开源的
  4. 很容易做备份
  5. 支持离线操作
  6. 很容易定制工作流程

二、安装Git

1、Git官方文档地址:

https://git-scm.com/book/zh/v2

2、macOS 平台 Git 下载地址:

https://git-scm.com/download/mac

3、Windows 平台 Git 下载地址:

https://git-scm.com/download/win

4、Linux 平台 Git 下载地址:

https://git-scm.com/download/linux

5、检查安装结果

$ git --version ## 通过执行该命令,看git是否返回版本信息

三、使用Git之前需要做的最小配置

1、配置user信息

  1. 配置user.name和user.email
$ git config --global user.name 'your_name'
$ git config --global user.email '[email protected]'

  1. git config命令的三个作用域
    缺省等同于local
$ git config --local ## local只对某个仓库有效
$ git config --global ## global对当前用户所有仓库有效
$ git config --system ## system对系统所有登录的用户有效

  1. 查看config配置,加--list
$ git config --list
$ git config --list --global
$ git config --list --system
$ git config --list --local

  1. 清除config配置,加--unset
$ git config --unset --global user.name
$ git config --unset --system user.name
$ git config --unset --local user.name

local、global、system的优先级:
local>global>system

四、创建Git仓库、Git基本命令

1、两种方式

  1. 用Git之前,已经存在项目代码
$ cd 项目代码所在的文件夹
$ git init

  1. 用Git之前,还不存在项目代码
$ cd 某个文件夹
$ git init your_project_name ## 会在当前路径下创建与项目名同名的文件夹
$ cd your_project

2、向Git仓库中添加文件

$ git add file_name ## file_name表示你的文件的名字
$ git add file_name1 file_name2 file_name3 ## 添加多个文件
$ git add -u ## 添加全部文件
$ git add . ## 添加该目录下的全部文件

3、Git仓库中工作区、暂存区、版本历史的关系

image

4、在Git仓库中给文件重命名

  1. 麻烦的方式
$ mv old_file_name new_file_name ## 第一步,修改文件名
$ git add new_file_name ## 第二步,将修改后的文件,添加到Git中
$ git rm old_file_name ## 第三步,移除掉旧的文件

  1. 简单的方式
$ git mv old_file_name new_file_name ## 通过git mv命令,直接将文件名修改

5、查看Git仓库的日志

  1. 查看详细日志
$ git log
$ git log --graph ## 图形化显示
$ git log branch_name ## 查看branch_name分支的日志

  1. 查看简洁日志
$ git log --oneline
$ git log --oneline branch_name ## 查看branch_name分支的日志
$ git log --oneline --all
$ git log --oneline --graph

  1. 查看最近几次的日志
$ git log -n4 ## n4表示查看最近4次的日志
$ git log --oneline -n4

6、git cat-file命令

$ git cat-file -t hash_id ## 查看该hash_id属于什么类型
$ git cat-file -p hash_id ## 查看该hash_id下的内容

7、Git中核心对象commit、tree、blob的关系

image

8、Git的分离头指针

分离头指针的应用场景:如果临时想基于某个commit做变更,试试新方案是否可行,就可以采用分离头指针的方式。测试后发现新方案不成熟,直接reset回其他分支即可。省却了建、删分支的麻烦了。

当创建一个分离头指针的时候,在切换分支时,记得将分离头挂到一个分支上,不然基于分离头提交的commit容易丢失

$ git branch branch_name commit_id

9、HEAD和Branch的关系

HEAD可以指向Branch的最新一次的提交,也可以指向Branch的某次提交(分离头状态)

  1. 一个节点,可以包含多个子节点(checkout 出多个分支)
  2. 一个节点可以有多个父节点(多个分支合并)
  3. ~和都是父节点,区别是跟随数字时候,2 是第二个父节点,而~2是父节点的父节点
  4. ~和^可以组合使用,例如 HEAD~2^2
$ git checkout -b branch_name commit_id ## 基于commit_id所在的提交,新建一个分支

10、删除分支

$ git branch -d branch_name
$ git branch -D branch_name

使用-d 在删除前Git会判断在该分支上开发的功能是否被merge到其它分支。如果没有,不能删除。如果merge到其它分支,但之后又在其上做了开发,使用-d还是不能删除。-D会强制删除。

11、提交命令

$ git commit -m '' ## 将缓存区的内容提交

12、修改commit的message

$ git commit --amend ## 修改最近一次commit的message
$ git rebase -i commit_id ## 该commit_id是我们要修改的那个commit的父commit,或者说是我们要修改的那个commit的上一个commit的id

注:修改commit的message只限于在没有push远程仓库之前,如果已经push到了远程仓库,那么禁止修改message

13、将几个连续commit整理成一个commit

$ git rebase -i 开始commit [结束commit]

在执行这个命令时,
如果没有指定 结束commit,那么结束commit 默认为当前分支最新的 commit,那么rebase 结束后会自动更新当前分支指向的 commit,
如果指定了结束 commit,而且结束 commit不是当前分支最新的 commit,那么rebase 后会有生成一个 游离的 head,,而且当前分支指向的commit 不会更新

14、暂存区和HEAD所含文件的差异

$ git diff --cached

15、工作区和暂存区所含文件的差异

$ git diff

16、暂存区恢复成和HEAD一样

$ git reset HEAD  ## 恢复所有文件
$ git reset HEAD -- file_name1 file_name2 ## 恢复指定文件

17、工作区恢复成暂存区一样

$ git checkout
$ git checkout -- file_name

18、消除最近几次提交

$ git reset --hard commit_id

19、查看分支

$ git branch
$ git branch -a
$ git branch -v
$ git branch -av
$ git branch -vv

20、删除文件

$ git rm filename ## 删除工作区中的文件
$ git rm --cached filename ## 删除暂存区中的文件

21.stash命令

  1. 将现在工作区的内容存进stash
$ git stash stash_name

  1. 将stash中的内容放回工作区
$ git stash apply  ## apply这种方式,即使将内容放回工作区后,也不会删除stash中的内容
$ git stash pop  ## pop这种方式,是将内容放回工作区后,同时也将stash中的内容删除

22.clone命令

  1. 克隆一个裸仓库(裸仓库对代码平台的意义很大)
    裸仓库就是只有.git 没有work、tree的仓库
$ git clone --bare path name ## path表示要克隆的仓库的路径,name表示克隆下来的新仓库的名字

  1. 克隆一个带工作空间的仓库
$ git clone url

  1. 仓库分为本地仓库、本地远程仓库和远程仓库
23.Git的备份

1.常用的传输协议


玩转Git三剑客学习笔记_第1张图片
常用的传输协议

2.哑协议与只能协议
直观区别:哑协议传输进度不可见,智能协议可见
传输速度:智能协议比哑协议传输速度快

3.备份特点


玩转Git三剑客学习笔记_第2张图片
备份特点

你可能感兴趣的:(玩转Git三剑客学习笔记)