<commit_before># GIT
## 版本控制
版本控制（Version Control）的作用是追踪文件的变化。为什么需要版本控制？简单说，就是当你出错了，可以很容易地回到没出错时的状态。

还有，版本控制方便多人协同开发。

## GIT是什么
Git是目前世界上最先进的分布式版本控制系统（没有之一）。

## 为什么使用GIT
Git有很多优势，其中之一就是远程操作非常简便，以及速度快。

## 使用
### 安装GIT软件
推荐使用Github的客户端 [windows 版下载](https://windows.github.com/)。

###  常用命令
* 检出仓库 `git clone /path/to/repository`
* 获取更新，并与本地代码进行合并 `git pull`
* 将文件添加到版本控制系统 `git add filePath`
	* `git add .` 添加当前目录下的所有文件
	* `git add -A` 添加当前目录下的所有文件，如有重命名的文件，会对重命名前的文件进行删除。`git add .`不会
* 提交改动代码 `git commit -m filePath "注释"` 注意:注释是必填的
* 提交所有改动代码 `git commit -am "注释"`
* 查看当前项目代码的状态 `git status`
* 将改动推送到服务器 `git push`。
    * 修改 push 的地址：修改.git/config文件夹里的url
* 将文件的内容替换成上次提交时候的内容 `git checkout filePath`
* 将还没提交的内容保存起来，所有的文件内容变成上次提交时的样子 `git stash`
* 回复上次`git stash`的内容，并与当前代码进行合并 `git stash pop`
* 回滚代码到指定版本： `git reset --hard 提交ID`
* 分支操作
	* 切换到某分支 `git checkout branchName`
	* 创建并切换到某分支 `git checkout -b branchName`。以当前分支的代码做为基础。获取远程分支并切换到该分支 `git checkout -b branchName origin/branchName`
	* 将某分支的改动推送到服务器 `git push origin branchName`
    * 将当前分支设置为提交的默认分支 `git config push.default current`。也可以设置为全局的 `git config --global push.default current`。
    * 删除本地分支 `git branch -d branchName`
    * 查看本分支列表 `git branch`。查看远程分支列表 `git branch -r`
    * 将 a 分支的内容合并到 b 分支。`git checkout b`,`git merge a`。
* 发生冲突时，文件中会用 `>>>>` 和 `<<<<` 来标明冲突的地方。合并好后，`git add 这个冲突的文件`。 然后再commit,push
* 给历史记录中的某个重要的一点打上标签 `git tag -a 标签名`
* 远程仓库
    * 查看该仓库远程 repo `git remote`
    * 添加其他远程仓库 `git remote add upstream xxx.git`。查看下仓库: `git remote -v` 。如果fork的别人的代码，要pull request 前，最好同步下别人最新的代码 ：
        * `git fetch upstream`
        * `git merge upstream/master`

* rebase。 合并多次提交；分支合并。
  * [彻底搞懂 Git-Rebase](http://jartto.wang/2018/12/11/git-rebase)


![git使用demo](git-imgs/git-use-example.jpg)

## git 提交规范
* [你可能会忽略的 Git 提交规范](http://jartto.wang/2018/07/08/git-commit/)
* [Commit message 和 Change log 编写指南](http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html)

## .gitignore
如果项目想让某些文件的版本不受Git管理，可以在项目的根路径创建个文件，名称为 `.gitignore`。内容为不受Git管理的文件名。 如
```<commit_msg>enchance<commit_after># GIT
## 版本控制
版本控制（Version Control）的作用是追踪文件的变化。为什么需要版本控制？简单说，就是当你出错了，可以很容易地回到没出错时的状态。

还有，版本控制方便多人协同开发。

## GIT是什么
Git是目前世界上最先进的分布式版本控制系统（没有之一）。

## 为什么使用GIT
Git有很多优势，其中之一就是远程操作非常简便，以及速度快。

## 使用
### 安装GIT软件
推荐使用Github的客户端 [windows 版下载](https://windows.github.com/)。

###  常用命令
* 检出仓库 `git clone /path/to/repository`
* 获取更新，并与本地代码进行合并 `git pull`
* 将文件添加到版本控制系统 `git add filePath`
	* `git add .` 添加当前目录下的所有文件
	* `git add -A` 添加当前目录下的所有文件，如有重命名的文件，会对重命名前的文件进行删除。`git add .`不会
* 提交改动代码 `git commit -m filePath "注释"` 注意:注释是必填的
* 提交所有改动代码 `git commit -am "注释"`
* 查看当前项目代码的状态 `git status`
* 将改动推送到服务器 `git push`。
    * 修改 push 的地址：修改.git/config文件夹里的url
* 将文件的内容替换成上次提交时候的内容 `git checkout filePath`
* 将还没提交的内容保存起来，所有的文件内容变成上次提交时的样子 `git stash`
* 回复上次`git stash`的内容，并与当前代码进行合并 `git stash pop`
* 回滚代码到指定版本： `git reset --hard 提交ID`
* 分支操作
	* 切换到某分支 `git checkout branchName`
	* 创建并切换到某分支 `git checkout -b branchName`。以当前分支的代码做为基础。获取远程分支并切换到该分支 `git checkout -b branchName origin/branchName`
	* 将某分支的改动推送到服务器 `git push origin branchName`
    * 将当前分支设置为提交的默认分支 `git config push.default current`。也可以设置为全局的 `git config --global push.default current`。
    * 删除本地分支 `git branch -d branchName`
    * 查看本分支列表 `git branch`。查看远程分支列表 `git branch -r`
    * 将 a 分支的内容合并到 b 分支。`git checkout b`,`git merge orgin/a`。
* 发生冲突时，文件中会用 `>>>>` 和 `<<<<` 来标明冲突的地方。合并好后，`git add 这个冲突的文件`。 然后再commit,push
* 给历史记录中的某个重要的一点打上标签 `git tag -a 标签名`
* 远程仓库
    * 查看该仓库远程 repo `git remote`
    * 添加其他远程仓库 `git remote add upstream xxx.git`。查看下仓库: `git remote -v` 。如果fork的别人的代码，要pull request 前，最好同步下别人最新的代码 ：
        * `git fetch upstream`
        * `git merge upstream/master`

* rebase。 合并多次提交；分支合并。
  * [彻底搞懂 Git-Rebase](http://jartto.wang/2018/12/11/git-rebase)


![git使用demo](git-imgs/git-use-example.jpg)

## git 提交规范
* [你可能会忽略的 Git 提交规范](http://jartto.wang/2018/07/08/git-commit/)
* [Commit message 和 Change log 编写指南](http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html)

## .gitignore
如果项目想让某些文件的版本不受Git管理，可以在项目的根路径创建个文件，名称为 `.gitignore`。内容为不受Git管理的文件名。 如
```
{'fraction_non_alphanumeric': 0.1375879640863868, 'fraction_numerical': 0.010677020140742538, 'mean_word_length': 4.888571428571429, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4397848', 'n_tokens_mistral': 2560, 'n_tokens_neox': 2762, 'n_words': 356}