Git常用命令介绍
Git 常用命令介绍
version 0.4
[TOC]
1. 基础说明
git 介绍
git 常见概念
commit: 提交commitId: 提交对应的哈希值branch: 分支HEAD: 头指针origin: 远端conflict:冲突merge: 合并rebase:变基fetch: 更新
工作流程

Git 可以大概分为三个区
Git 本地数据管理,大概可以分为三个区,工作区,暂存区和版本库。
工作区(Working Directory)
是我们直接编辑的地方,例如 Android Studio 打开的项目,记事本打开的文本等,肉眼可见,直接操作。暂存区(Stage 或 Index)
数据暂时存放的区域,可在工作区和版本库之间进行数据的友好交流。版本库(commit History)
存放已经提交的数据,push 的时候,就是把这个区的数据 push 到远程仓库了。
add命令
git add .:他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。(当前目录与子目录)git add -u:他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add –update的缩写)git add -A:是上面两个功能的合集(git add –all的缩写)(所有目录)
.gitignore
commit/checkout
- 检出分支
 - 检出文件
 - 还原文件
 
diff
git diff [<options>] [<commit>] [--] [<path>...]
reset
git reset: 清空git add 的文件git reset HEAD:默认mixed模式

clone & fetch & pull
git clone [-b <name>] <repository> [<directory>]fetch:pull: fetch + merge
stash
git stash save "save message": 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。git stash list:查看stash了哪些存储git stash show:显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个git stash show stash@{1}git stash show -p: 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p,比如第二个:git stash show stash@{1} -pgit stash apply:应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num}, 比如第二个:git stash apply stash@{1}git stash pop:命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}git stash drop stash@{$num}:丢弃stash@{$num}存储,从列表中删除这个存储git stash clear:删除所有缓存的stash
2. merge & rebase
| 说明/方式 | merge | rebase | 
|---|---|---|
| 特点 | 自动创建一个新的commit,如果合并的时候遇到冲突,仅需要修改后重新commit | 会合并之前的commit历史 | 
| 优点 | 记录了真实的commit情况,包括每个分支的详情 | 得到更简洁的项目历史,去掉了merge commit | 
| 缺点 | 因为每次merge会自动产生一个merge commit,所以在使用一些git 的GUI tools,特别是commit比较频繁时,看到分支很杂乱。 | 如果合并出现代码问题不容易定位,因为re-write了history | 
合并时如果出现冲突需要按照如下步骤解决:
- 修改冲突部分
 - git add
 - git rebase –continue/skip
 - 不要在git add 之后习惯性的执行 git commit命令
 
3. rebase 常见功能
梳理分支(合并提交,调整顺序,剔除等)
git pull –rebase
当我们从远程拉代码的时候如果使用:git pull –rebase,则会以rebase的方式进行更新,而不是默认的merge。
git rebase –interactive
git rebase [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>]                [<upstream> [<branch>]]
p:保留当前commit,不做处理。r:修改commit message。(git commit --amend)e:修改这个commit作的修改。比如某个commit漏掉了什么配置,想要再提交新的文件; 或者删除一些无用代码,等等都可以用这个命令。s:保留这个commit的修改,但是把它合并到前一个commit中。d:删除commit
不要在远程推送分支使用rebase操作
4. patch & cherry-pick
patch 和diff 的区别
Git 提供了两种补丁方案,一是用git diff生成的UNIX标准补丁.diff文件,二是git format-patch生成的Git专用.patch 文件。
.diff文件只是记录文件改变的内容,不带有commit记录信息,多个commit可以合并成一个diff文件。
.patch文件带有记录文件改变的内容,也带有commit记录信息,每个commit对应一个patch文件。
cherry-pick
git cherry-pick [--edit] [-n] [-m parent-number] [-s] [-x] [--ff] [-S[<keyid>]] <commit>...git cherry-pick <commitId>...
5. 杂项
协同工作流程

在团队中使用GitLab中的Merge Request工作模式
revert
git revert <commitId>
git submodule
初始化git submodule init
添加子仓库git submodule add ssh://git@139.219.128.51:5837/zhengrong/CRBluetoothCore_android.git
更新子仓库git submodule foreach git pull
提交规范
- 标题行: 必填, 描述主要修改类型和内容
 - 主题内容: 描述为什么修改, 做了什么样的修改, 以及开发的思路等等
 - 页脚注释: 放 Breaking Changes 或 Closed Issues
 
1  | <type>(<scope>): <subject>  | 
辅助插件类
.gitconfig
Github:git-chglog:
git-chglog v1.10.8..v1.11.0 -> CHANGELOG.md


6. 更新日志:
| 版本 | 时间 | 说明 | 
|---|---|---|
| version 0.1 | 2019年09月03日21:32:43 | 初版 | 
| version 0.2 | 2019年09月04日12:34:34 | 完善杂项介绍 | 
| version 0.3 | 2019年09月05日10:36:54 | 添加基础说明,添加部分杂项 | 
| version 0.4 | 2022年02月08日17:49:01 | 更换图床为Github |