Git 介绍

Posted by Oscaner on December 6, 2018

Git的设计让使用者觉得自己比想象中的笨。 —— Andrew Morton (Linux核心开发者)

初次使用

在命令行输入以下命令:

1
2
> git config --global user.name "用户名"
> git config --global user.email "邮箱"

这个用户名和邮箱将是你未来使用 Git 进行项目版本管理的身份标识

用户名和邮箱不要使用中文

1.png

理论基础

Git 记录的是什么?

用过 SVN 的应该都知道, SVN 记录的是每一次版本变动的内容

2.png

而 Git 则是将每个版本独立保存

3.png

三棵树

  1. Working: 工作区域, 一般是项目所存放的目录

  2. Stage: 暂存区域, 暂存所有改动准备提交

  3. Repository: Git 仓库, 最终存放项目的位置, 并且携带版本编号

4.png

工作流程

  1. 在工作目录中添加、修改文件

  2. 将需要进行版本管理的文件放入暂存区域

  3. 将暂存区域的文件提交到 Git 仓库

三种状态

  • 已修改 (modified)
  • 已暂存 (staged)
  • 已提交 (committed)

流程图

14.png

简单使用

  1. 创建项目文件夹, 并初始化仓库

    1
    
     > git init
    

    5.png

  2. 添加 README.md 文件, 并提交到 Git 仓库

    1
    2
    
     > git add ./README.md
     > git commit -m "add a README file."
    

    6.png

基础操作

查看状态

1
> git status

7.png

  1. 添加 LICENSE 文件后

    8.png

  2. LICENSE 加入暂存区

    9.png

  3. 将暂存区的最新记录撤回

    10.png

  4. LICENSE 提交到仓库, 并修改 LICENSE 文件

    11.png

  5. git checkout -- [file]: 将仓库中的文件覆盖回本地 (撤销修改)

查看历史

1
2
3
4
5
> git log
> git log --all --oneline --graph # 图形化简要显示所有log (包括分支)

# or 安装 tig 工具 (非常好用)
> tig

回到之前版本

1
> git reset HEAD~

15.png

移动 HEAD 的指向, 将其指向上一个快照

  • reset 命令说明

    1. git reset --mixed HEAD~: 移动 HEAD 的指向, 将其指向上一个快照。将 HEAD 移动后指向的快照回滚到工作目录, 并保留修改。等同于 git reset HEAD~

    2. git reset --soft HEAD~: 移动 HEAD 的指向, 将其指向上一个快照。并将 HEAD 移动前指向的快照回滚到暂存区域, 并保留修改。

    3. git reset --hard HEAD~: 移动 HEAD 的指向, 将其指向上一个快照。将 HEAD 移动后指向的快照回滚到工作目录, 并丢弃修改。

  • 指定 ID 回滚

    1
    
      > git reset [版本快照的ID]
    
  • 回滚个别文件

    1
    
      > git reset [版本快照] [文件名 or 路径]
    

版本对比

  • 比较暂存区域与工作目录

    1
    
      > git diff
    
  • 比较两个历史快照

    1
    
      > git diff [快照ID1] [快照ID2]
    

    16.png

  • 比较当前工作目录和 Git 仓库中的快照

    1
    
      > git diff [快照ID]
    
  • 比较暂存区域和 Git 仓库快照

    1
    
      > git diff --cached [快照ID]
    

17.png

修改最近提交

  1. 场景一: 版本刚一提交 (commit) 到仓库, 突然想起漏掉两个文件还没有添加 (add)

  2. 场景二: 版本刚一提交 (commit) 到仓库, 突然想起版本说明写得不够全面

执行带 --amend 选项的 commit 提交命令, Git 就会”更正”最近的一次提交

1
> git commit --amend -m "这是修改的说明"

删除文件

1
> git rm [文件名]

该命令删除的只是工作目录和暂存区域的文件, 也就是取消跟踪, 在下此提交时不纳入版本管理

1
2
> git rm -f <文件名>        # 暴力删除
> git rm --cached [文件名]  # 保留工作目录

重命名文件

1
> git mv [旧文件名] [新文件名]

Git 分支

18.png

克隆一份全新的目录以同样拥有 5 个分支来说,

SVN 是同时复制 5 个版本的文件, 也就是说重复 5 次同样的动作。

而 Git 只是获取文件的每个版本的元素, 然后只载入主要的分支 (master)

  • 创建 feature 分支

    1
    
      > git branch feature
    

    19.png

  • 切换到 feature 分支

    1
    2
    
      > git checkout feature
      > git checkout -b feature2 # 自动创建分支并切换
    

    20.png

  • 将指定分支合并到当前分支

    1
    2
    
      > git checkout master # 切换到主分支
      > git merge feature   # 将 feature 分支合并到 master 分支
    
  • 删除 feature2 分支

    1
    
      > git branch -D feature2
    

【完】附一份 《Git 笔记》


本文由 Oscaner 创作, 采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外, 均为本站原创或翻译, 转载前请务必署名