# git-document
**Repository Path**: loushengyue/git-document
## Basic Information
- **Project Name**: git-document
- **Description**:
Git 命令精简版手册
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-01-24
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Git 命令
## 1. 起步
### 1.1 安装
[安装 Git](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)
### 1.2 初次运行 Git 前的配置
#### 1.2.1 Git 配置文件
`Git` 自带一个 `git config` 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:
- `/etc/gitconfig` 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 `--system` 选项的 `git config` 时,它会从此文件读写配置变量。
- `~/.gitconfig` 或 `~/.config/git/config` 文件:只针对当前用户。 可以传递 `--global` 选项让 `Git` 读写此文件。
- 当前使用仓库的 `Git` 目录中的 `config` 文件(就是 `.git/config`):针对该仓库。
每一个级别覆盖上一级别的配置,所以 `.git/config` 的配置变量会覆盖 `/etc/gitconfig` 中的配置变量。
#### 1.2.2 用户信息
当安装完 `Git` 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 `Git` 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:
```
git config --global user.name "yourname"
git config --global user.email emailname@belle.com
```
如要查看当前用户信息:
```
git config --global user.name
git config --global user.email
```
#### 1.2.3 检查配置信息
```
git config --list
```
----
## 2. Git 基础
### 2.1 克隆现有的仓库
```
git clone [url]
```
例如:
```
git clone http://gitlab.wonhigh.cn/retail-web/retail-mobile-mps.git
```
### 2.2 记录每次更新到仓库
> 请记住,你工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。 工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。
> 编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。 我们逐步将这些修改过的文件放入暂存区,然后提交所有暂存了的修改,如此反复。所以使用 Git 时文件的生命周期如下:
#### 2.2.1 检查当前文件状态
```
git status
```
#### 2.2.2 跟踪新文件/暂存已修改文件
```
git add ...
```
此命令可以将具体某些文件加入暂存区。
若要添加当前目录下的所有未追踪文件,则使用以下命令更加方便
```
git add ./
```
#### 2.2.3 忽略文件
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以创建一个名为 `.gitignore` 的文件,列出要忽略的文件模式。
例如:
```
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*
```
#### 2.2.4 查看已暂存和未暂存的修改
```
git diff
```
此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。
若要查看已暂存的将要添加到下次提交里的内容,可以用 `git diff --cached` 命令。(Git 1.6.1 及更高版本还允许使用 `git diff --staged`,效果是相同的,但更好记些。)
```
git diff --cached
# OR
git diff --staged
```
#### 2.2.5 提交更新/跳过使用暂存区域
```
git commit
# OR
git commit -m 'your commit message'
```
推荐使用`git commit -m`命令。
```
git commit -a -m 'your commit message'
```
给 `git commit` 加上 `-a` 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 `git add` 步骤。
#### 2.2.6 移除文件/移除暂存区文件
```
rm testFile.txt
git rm testFile.txt
# OR
git rm --cached testFile.txt
```
未使用 `git add` 命令添加到暂存的,直接使用 `rm` 命令移除文件即可。否则需要再次执行 `git rm` 命令来删除暂存区的文件。但若直接使用 `git rm --cached` 命令,只会删除暂存区的文件。
#### 2.2.7 移动文件
```
git mv file_from file_to
```
### 2.3 查看提交历史
```
git log
```
[了解更多](https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E5%8E%86%E5%8F%B2)
### 2.4 撤消操作
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。此时,可以运行带有 `--amend` 选项的提交命令尝试重新提交。
```
git commit --amend
```
例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:
```
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
```
最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。
#### 2.4.1 取消暂存的文件
```
git reset HEAD ...
```
#### 2.4.2 撤消对文件的修改
```
git checkout ...
```
**注意:** `git checkout [file]` 是一个危险的命令,这很重要。 你对那个文件做的任何修改都会消失 - 你只是拷贝了另一个文件来覆盖它。 除非你确实清楚不想要那个文件了,否则不要使用这个命令。
### 2.5 远程仓库的使用
#### 2.5.1 从远程仓库中抓取与拉取
```
git fetch [remote-name]
```
#### 2.5.2 推送到远程仓库
```
git push origin master
```
### 2.6 打标签
像其他版本控制系统(`VCS`)一样,`Git` 可以给历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 等等)。 在本节中,你将会学习如何列出已有的标签、如何创建新标签、以及不同类型的标签分别是什么。
#### 2.6.1 列出标签
```
git tag
```
#### 2.6.2 附注标签
在 `Git` 中创建一个附注标签是很简单的。 最简单的方式是当你在运行 `tag` 命令时指定 `-a` 选项:
```
git tag -a v1.4 -m 'my version 1.4'
```
----
## 3. Git 分支
### 3.1 分支简介
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
#### 3.1.1 分支创建
```
git branch mobile-mps-v1.0
```
#### 3.1.2 分支切换
```
git checkout mobile-mps-v1.0
```
想要新建一个分支并同时切换到那个分支上,你可以运行一个带有 `-b` 参数的 `git checkout` 命令:
```
git checkout -b mobile-mps-v1.1
```
### 3.2 分支的合并与删除
#### 3.2.1 合并分支
将 `mobile-mps-1.1` 分支合并到 `master` 命令:
```
git checkout master
git merge mobile-mps-1.1
```
#### 3.2.2 删除分支
```
git branch -d mobile-mps-1.1
```
**注意:** 删除分支的时候不能是当前指针所在的分支(即当前分支)。
#### 3.2.3 遇到冲突时的分支合并
当执行 `git merge` 命令后,有冲突时通常会在某些文件中出现类型下面的文本:
```
<<<<<< HEAD:index.html
=======
>>>>>> iss53:index.html
```
解决办法:
- 手动删除不需要的代码,包括 `<<<<<<<`,`=======` 和 `>>>>>>>>` 标志;
- 使用 `git mergetoll` 图形化工具来解决冲突。
### 3.3 分支管理
#### 3.3.1 查看分支
查看本地分支:
```
git branch
```
查看所有分支(包括本地和远程):
```
git branch -a
```
查看远程分支:
```
git branch -r
```
`--merged` 与 `--no-merged` 这两个有用的选项可以过滤这个列表中已经合并或尚未合并到当前分支的分支。
如果要查看哪些分支已经合并到当前分支,可以运行:
```
git branch --merged
```
查看所有包含未合并工作的分支,可以运行:
```
git branch --no-merged
```
----
### 友情链接
[Git 命令](https://git-scm.com/book/zh/v2)