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} -p
git 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 |