1. Cheat Sheet
👇👇需要科学上网👇👇
👉👉👉 点击跳转 - 需要科学上网
2. Git 飞行规则
什么是"飞行规则"?
这是一篇给宇航员(这里就是指使用Git的程序员们)的指南,用来指导问题出现后的应对之法。
飞行规则(Flight Rules) 是记录在手册上的来之不易的一系列知识,记录了某个事情发生的原因,以及怎样一步一步的进行处理。本质上, 它们是特定场景的非常详细的标准处理流程。 自20世纪60年代初以来,NASA一直在捕捉(capturing)我们的失误,灾难和解决方案, 当时水星时代(Mercury-era)的地面小组首先开始将“经验教训”收集到一个纲要(compendium)中,该纲现在已经有上千个问题情景,从发动机故障到破损的舱口把手到计算机故障,以及它们对应的解决方案。
2.1. 两个 Git 仓库之间 cherry pick
查看本地项目的远程仓库地址
1
2
3git remote
或
git remote show添加需同步commit的所属远程仓库地址
1
2
3
4git remote add other git@xxxxx.git
如果 copy 错地址了,使用下面命令修改
git remote set-url other git@xxx.git查看添加地址是否正确
1
git remote get-url other
同步远程仓库信息
1
git fetch other
进行 cherry pick
1
git cherry-pick 61ecfaxxxxxxxxxxxxxxxx26233dfb168
或者在 IDEA 界面上进行 cherry pick 操作。
2.2. 为仓库设置不同的用户名和邮箱
不是用全局设置的用户名和邮箱,针对某个项目单独修改。
命令行进入项目后,如下设置:
1 | git config user.name "username" |
之后可以打开 .git/config
文件看配置生效如下
1 | [user] |
2.3. 本地仓库与远程仓库关联
1 | git remote add origin git@github.com:{name}/{projectName}.git |
git@github.com:{name}/{projectName}.git
就是远程仓库的地址。
2.4. 修改远程仓库地址,进行本地仓库迁移
新建远端仓库后,在本地的 git 仓库中执行下面命令:
1 | git remote set-url origin xxx |
2.5. 修改分支名称
1 | 1.将本地分支oldBranch切一个分支到本地: |
2.6. 取消暂存的文件
场景:不小心执行了git add .
将所有待变更文件都提交到了暂存区(新增文件9527-1.txt,修改文件9527.txt)。
目的:9527.txt文件还没有修改完,是误提交,需要取消该文件的暂存。
1 | $ git status |
通过git reset HEAD [file]
来取消暂存。
1 | $ git reset head 9527.txt |
至此,9527.txt文件已经取消暂存了。
2.7. 本地项目关联Github/GitLab
首先将本地项目 git 初始化。
然后在项目根目录下执行命令:
1 | git remote add origin [https的git网址] |
如果出现fatal:remote origin already exists
,输入以下命令:
1 | git remote rm origin |
然后重新执行第一条命令。
2.8. 中文文件名乱码
使用git add
提交时,中文文件名会显示乱码,如下命令可以解决。
1 | git config --global core.quotepath false |
2.9. 跟踪空目录
使用.gitkeep
windows创建
1
type null>.gitkeep
linux、macos创建
1
touch .gitkeep
2.10. 查看git安装路径
1 | which -a git |
2.11. brew安装git后改变指向
1 | brew link git --overwrite |
2.12. 撤回 Commit
2.12.1. 方式一:IDEA(Undo Commit)
如果代码没有push,会撤销 Commit 动作(删除)。如果代码已经 push ,线上 commit 记录还会存在。
2.12.2. 方式二:IDEA(Revert Commit)
会新增一条 Revert “xxx commit” 的 commit 提交,该提交进行的操作是将"xxx commit"中对代码进行的修改全部撤回掉。
2.13. cherry-pick
将某个分支上的 commit
移动到另一个分支上。
2.13.1. 命令行方式
当前在
release
分支,copy 出对应的commit id
,如:7114dcbe7f8557a2f5ff2324ba59ac01d02344b5
。切换到
dev
分支,输入命令:git cherry-pick 7114dcbe7f8557a2f5ff2324ba59ac01d02344b5
。在
dev
分支查看git log
已经有对应的记录了。但它是一个新的提交,因此commit id
会不一样。
2.14. 配置多个 Git 账号
2.14.1. 清空全局用户配置
如果之前使用过 --global
设置过全局的用户名和邮箱,需要使用下面的命令清空掉。
1 | git config --global --unset user.name |
2.14.2. 生成密钥
使用下面的命令生成所需要的各平台密钥:
1 | ssh-keygen -t rsa -C 'Github邮箱' -f ~/.ssh/id_rsa_github |
进入到 .ssh
文件中就能看到新生成的这几个密钥文件了。
2.14.3. 配置秘钥
- Github:可在 SSH and GPG keysopen in new window 中点击
New SSH key
按钮来添加 SSH key。 - Gitlab:可在 User Settings - SSH Keysopen in new window 中配置。
- Gitee:可在设置 - SSH 公钥open in new window 中配置。
2.14.4. 配置 Config
在 .ssh
中新建一个 config
文件。
1 | cd ~/.ssh |
通过 vim
编辑该文件,填入以下配置内容。
1 | Host github.com |
2.14.5. 测试连通性
1 | ssh -T git@github.com |
以 Github 为例,首次输入 ssh -T git@github.com
后会提示 Are you sure you want to continue connecting
,输入 yes
后如果看到 successfully
字样说明就成功了,如果出现 Permission denied
说明失败,需要检查密钥是否配置以及是否复制有误。
3. Git submodule
git 子模块功能,作用不赘述。
3.1. 创建
先在gitlab、github上创建好子项目,然后创建父项目,使用 submodule add
添加进来。
1 | 1. 创建父项目:parent |
命令 | 含义 |
---|---|
git submodule foreach git pull origin master | 为所有子模块循环执行命令:git pull origin master |
git submodule foreach git pull --all | 为所有子模块循环执行命令:git pull --all |
4. 规范编写Git Commit Message
Commit Message 格式分为三个部分:Header、Body、Footer;(Header是必填,Body、Footer非必填)
1 | <type>(<scope>): <subject> |
4.1. Header
header部分只有一行,包含三个必须的字段:type(必填)、scope(非必填)、subject(必填)
type
说明
commit
类别,可以使用下面七个标识feat
:新功能(feature)fix
:修补bugdocs
:文档(documentation)style
: 格式(不影响代码运行的变动,空格,格式化,等)refactor
:重构(即不是新增功能,也不是修改bug的代码变动)perf
: 性能 (提高代码性能的改变)test
:增加测试build
: 影响构建系统或外部依赖项的更改(maven,gradle,npm等)ci
:对CI配置文件和脚本的更改chore
:对非 src 和 test 目录的修改revert
: Revert a commit
scope
scope
用于说明commit
影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。subject
subject
是commit
目的的简短描述,不超过50个字符。
4.2. Body
Body
部分是对本次commit
的详细描述,可以分成多行。
4.3. Footer
Footer 部分只用于两种情况。
- 不兼容变动
- 关闭 Issue
4.4. 插件
推荐IDEA 插件:Git Commit Template