Git教程
  
常用 Git 命令清单
1. 环境配置
设置用户信息  
1 2
   | git config --global user.name "Olvi73" git config --global user.email "Olvi73@gmail.com"
   | 
 
 
查看配置信息  
1 2
   | git config --list git config user.name
   | 
 
 
上述命令设置的信息会保存在~/.gitconfig中
2.本地初始化Git仓库
获取Git仓库的方式: 
- 本地初始化Git仓库
 
- 从远程仓库克隆
 
2.1 本地初始化Git仓库
初始化命令
2.2 从远程仓库克隆
克隆命令
1 2 3
   | git clone 远程仓库地址 例如 git clone https://github.com/torvalds/linux.git
   | 
 
3. 工作目录、暂存区及版本库
版本库:.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等。
工作目录(工作区):包含.git文件夹的目录就是工作目录,主要用于存放开发的代码。
暂存区:.git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方。
工作区->git add->暂存区->git commit->版本库
3.1 Git工作目录下文件的两种状态
- untracked 未跟踪(未被纳入版本控制)  
 
- tracked 已跟踪(被纳入版本控制)  
- Unmodified 未修改状态
 
- Modified 已修改状态
 
- Staged 已暂存状态
 
 
4. 本地仓库操作
查看文件状态
1 2
   | git status git status -s //输出更加简洁
   | 
 
将未跟踪(untracked)的文件加入暂存区
将已跟踪的文件变成未跟踪文件
1
   | git reset helloworld.txt
   | 
 
将暂存区的文件修改提交到本地仓库
1
   | git commit -m "init repo"
   | 
 
commit 内容
| Leading active verb | 
Explanation | 
解释 | 
| Add | 
Create a capability e.g. feature, test, dependency. | 
添加功能 | 
| Cut | 
Remove a capability e.g. feature, test, dependency. | 
移除功能 | 
| Fix | 
Fix an issue e.g. bug, typo, accident, misstatement. | 
解决问题 | 
| Bump | 
Increase the version of something e.g. dependency. | 
版本升级 | 
| Make | 
Change the build process, or tooling, or infra. | 
改变工具 | 
| Start | 
Begin doing something; e.g. create a feature flag. | 
开始 | 
| Stop | 
End doing something; e.g. remove a feature flag. | 
停止 | 
| Refactor | 
A code change that MUST be just a refactoring. | 
必须重构 | 
| Reformat | 
Refactor of formatting, e.g. omit whitespace. | 
格式化 | 
| Optimize | 
Refactor of performance, e.g. speed up code. | 
优化 | 
| Document | 
Refactor of documentation, e.g. help files. | 
重构文档 | 
commit
feat 功能feature的意思,也是最常用的。当你的功能有变更的时候,都可以采用这种类型的type   
fix 当然指的是bug修复   
docs 更新了文档,或者更新了注释   
style 代码格式调整,比如执行了format、更改了tab显示等   
refactor 重构代码。指的是代码结构的调整,比如使用了一些设计模式重新组织了代码   
perf 对项目或者模块进行了性能优化。比如一些jvm的参数改动,把stringbuffer改为stringbuilder等   
test 这个简单,就是增加了单元测试和自动化相关的代码   
build 影响编译的一些更改,比如更改了maven插件、增加了npm的过程等   
ci 持续集成方面的更改。现在有些build系统喜欢把ci功能使用yml描述。如有这种更改,建议使用ci   
chore 其他改动。比如一些注释修改或者文件清理。不影响src和test代码文件的,都可以放在这里   
revert 回滚了一些前面的代码 
删除文件
将文件添加至忽略列表
一般我们总会有些文件无需纳入Git管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以在工作目录中创建一个名为.gitignore的文件(文件名称固定),列出要忽略的文件模式。
以斜杠/开头表示目录;
以星号*通配多个字符;
以问号?通配单个字符
以方括号[]包含单个字符的匹配列表;
以叹号!表示不忽略(跟踪)匹配到的文件或目录;
1 2 3 4
   | /res/ 过滤整个文件夹 *.a 过滤所有.a文件 /res/a.c 过滤某个具体文件 !b.a 不过滤b.a文件
   | 
 
查看日志记录
5. 远程仓库操作
- 查看远程仓库
 
- 添加远程仓库
 
- 从远程仓库克隆
 
- 移除无效的远程仓库
 
- 从远程仓库抓取与拉取
 
- 推送到远程仓库
 
查看远程仓库
1 2 3
   | git remote git remote -v git remote show origin  origin是git remote的name
   | 
 
添加远程仓库
1
   | git remote [shortname] [url]
   | 
 
从远程仓库克隆
移除远程仓库
从远程仓库抓取与拉取
1 2
   | git fetch  抓取不merge git pull  抓取并merge
   | 
 
注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal:refusing to merge unrelated histories),解决此问题可以在git pull命令后面加上参数--allow-unrelated-histories
推送到远程仓库
6. Git分支
- 查看分支
 
- 创建分支
 
- 切换分支
 
- 推送至远程仓库分支
 
- 合并分支
 
- 删除分支
 
查看分支
1 2 3
   | git branch	列出所有本地分支 git branch -r	列出所有远程分支 git branch -a	列出所有本地分支和远程分支
   | 
 
创建分支
1
   | git branch [branch name]
   | 
 
切换分支
推送至远程仓库分支
1
   | git push origin [branch name]
   | 
 
合并分支