文章目录
  1. 1. git的目标
    1. 1.1. 直接记录快照,而非差异比较
    2. 1.2. 三种状态
  2. 2. 运行git前的配置
    1. 2.1. 用户信息
    2. 2.2. git的颜色
    3. 2.3. 默认文本编辑器
  3. 3. 获取git仓库
    1. 3.1. 当有远程仓库的时候,只需要把远程仓库克隆下来
    2. 3.2. 没有远程仓库的时候
    3. 3.3. 有远程仓库,也有本地仓库
  4. 4. 记录每次更新到仓库
    1. 4.1. 查看当前目录当中有哪些文件存在于工作目录,哪些存在于暂存区
    2. 4.2. 从工作目录当中提交到暂存区
    3. 4.3. 从暂存区当中删除文件
    4. 4.4. 从暂存区当中提交到git仓库
  5. 5. 查看提交历史
    1. 5.1. 查看
    2. 5.2. 配置git lg

我使用git已经一年了,在这里记录下git的常用命令

git的目标

  • 速度
  • 简单的设计
  • 使用分支来允许多个并行开发
  • 完全分布式
  • 有能力高效管理类似 Linux 内核一样的超大规模项目

直接记录快照,而非差异比较

用惯了git diff的我一直以为git是把保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。但是事实上git 更像是把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。

三种状态

已提交(committed)、已修改(modified)和已暂存(staged)。
三个工作区域:工作目录(Working Directory)以及暂存区(Staging Area)和git仓库(.git directory)

git三个工作区域

运行git前的配置

用户信息

git需要知道你的用户名和email地址,这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改。

1
2
git config --global user.name "username"
git config --global user.email username@example.com

使用--global的意思是把这个设置变成全局的,这样的话这条命令只需要执行一次。使用了--global的话能找到~/.gitconfig的文件,这就是git的配置文件

git的颜色

1
git config --global color.ui true

设置了这个选项之后,git status将会显示出颜色效果,表现为工作目录当中的文件为红色,暂存区当中的目录为绿色。

默认文本编辑器

这个是当使用到git rebase -i的时候会用到的配置

1
git config --global core.editor vim

获取git仓库

当有远程仓库的时候,只需要把远程仓库克隆下来

1
git clone https://github.com/username/project.git

其实这个从远程仓库克隆下来的只有git directory而已,恢复工作目录是在本地进行的,这就保证了clone的速度。
这就有一个有意思的方法,就是当我要把一台主机当中的项目拷贝到另外一台主机,其实我只需要拷贝这个项目的.git目录,然后在另外一台主机当中使用git reset --hard来恢复工作目录

也可以只克隆一个分支下来

1
git clone -b stable https://github.com/username/project.git

-b是branch的意思,指定stable分支

没有远程仓库的时候

进入到需要使用git的目录下,执行

1
git init

可以发现在这个目录下已经生成了一个.git的目录

有远程仓库,也有本地仓库

想要把本地仓库和远程仓库关联起来使用

1
git remote add origin git@github.com:username/project.git

使用

1
git remote -v

可以列出远程仓库

记录每次更新到仓库

查看当前目录当中有哪些文件存在于工作目录,哪些存在于暂存区

1
git status

如果前面配置了颜色的设置,那么在这里可以很清晰地看到红色的是工作目录下的文件,绿色的是暂存区当中的文件

从工作目录当中提交到暂存区

file是工作目录当中的文件名

1
git add file

我一般使用的是

1
git add .

这条命令把当前目录中所有处于工作目录下的文件提交到暂存区。一般是配合.gitignore来使用的,编辑.gitignore来写入不想被提交的文件名,git会自动忽略掉。
git 2.0版本以上使用

1
git add --all

从暂存区当中删除文件

1
git rm file

从暂存区当中提交到git仓库

1
git commit -m"first commit"

还可以使用以下方式来直接从工作目录提交到git仓库

1
git commit -am"first commit"

这个-m是message的意思,是用来标示git这一次提交的简介,写的好的message对于代码阅读和bug追踪非常有帮助。以下是我一直使用的message的写法:
标签+信息
标签有以下几种

ADD: 当这次的提交是新增一些文件的时候
DEL:当这次的提交是删除一些文件的时候
MOD:当这次的提交是修改一些文件的时候
BUG:当发现了bug,还没修复的时候,或者功能还没开发完,但是处于某种原因,需要提交到git仓库当中做备份的时候
FIX:修好了一个bug

比如说当我加入一个CPU监控页面的代码:

1
git commit -m"ADD: add CPU monitor mudule"

当删除和修改一个文件的时候,我一般喜欢加上文件的路径:

1
git commit -m"DEL: delete config.xml from CPU monitor mudule, where in ~/project/uitl/config"

当发现一个BUG:

1
git commit -m"BUG: a BUG in CPU mointor module, can't view CPU type when click the view button"

查看提交历史

查看

1
git log

默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。

配置git lg

在命令行下执行

1
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

使用git lg就能比git log更加清楚查看git的历史

文章目录
  1. 1. git的目标
    1. 1.1. 直接记录快照,而非差异比较
    2. 1.2. 三种状态
  2. 2. 运行git前的配置
    1. 2.1. 用户信息
    2. 2.2. git的颜色
    3. 2.3. 默认文本编辑器
  3. 3. 获取git仓库
    1. 3.1. 当有远程仓库的时候,只需要把远程仓库克隆下来
    2. 3.2. 没有远程仓库的时候
    3. 3.3. 有远程仓库,也有本地仓库
  4. 4. 记录每次更新到仓库
    1. 4.1. 查看当前目录当中有哪些文件存在于工作目录,哪些存在于暂存区
    2. 4.2. 从工作目录当中提交到暂存区
    3. 4.3. 从暂存区当中删除文件
    4. 4.4. 从暂存区当中提交到git仓库
  5. 5. 查看提交历史
    1. 5.1. 查看
    2. 5.2. 配置git lg