【笔记】git随手记
Dec 7, 2019笔记gitgit随手记
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
操作导图
常用术语
CR
: Code Review. 请求代码审查。PR
: pull request. 拉取请求,给其他项目提交代码。MR
: merge request. 合并请求。LGTM
: Looks Good To Me.对我来说,还不错。表示认可这次PR,同意merge合并代码到远程仓库。WIP
: Work In Progress. 进展中,主要针对改动较多的 PR,可以先提交部分,标题或 Tag 加上 WIP,表示尚未完成,这样别人可以先 review 已提交的部分。PTAL
: Please Take A Look. 请帮我看下, 邀请别人review自己的代码。ACK
: Acknowledgement. 承认,同意。表示接受代码的改动。NACK/NAK
: Negative acknowledgement. 不同意,不接受这次的改动。RFC
: Request For Comment. 请求进行讨论,表示认为某个想法很好,邀请大家一起讨论一下。ASAP
: As Soon As Possible. 请尽快完成。IIRC
: If I Recall Correctly. 如果我没有记错的话。IMO
: In My Opinion. 在我看来。TBD
: To Be Done. 未完成,待续。TL;DR
: Too Long; Didn’t Read. 太长懒得看。常见于README文档。
Mac下的.DS_Store
文件
使用Mac的用户可能会注意到,系统经常会在每个目录下生成一个隐藏的文件——即.DS_Store
文件。.DS_Store
(全程Desktop Services Store)是一种由苹果公司的Mac OS X操作系统所创造的隐藏文件,目的在于存储目录的自定义属性,例如文件们的图标位置或者是背景色的选择。类似于windows下的desktop.ini
文件。
删除.DS_Store
文件
如果项目还没有自动生成.DS_Store
文件,那么直接将.DS_Store
加入到.gitignore
文件就可以了。如果项目已经存在.DS_Store
文件,那就需要先从项目中将其删除,再将它加入到.gitignore
。如下:
1 | find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch |
如果只是删除磁盘上的.DS_Store
文件,可以使用如下命令来删除当前目录及其子目录下的.DS_Store
文件:1
find . -name '*.DS_Store' -type f -delete
如果使用Github Desktop来创建repository以及publish repository,那么客户端会自己处理此问题,即删除此文件。
禁止或启用.DS_Store
生成
禁止:1
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE
启用:1
defaults delete com.apple.desktopservices DSDontWriteNetworkStores
gitk
gitk 是 git 提供的一个gui工具,可以很清晰地查看搜索提交历史及 git 相关操作。在终端 git 仓库目录下输入 gitk 命令即可使用。
通过右键我们可以执行一些简单的操作,包括基于当前提交创建tag,创建分支,reset到当前提交、revert当前提交等。
颜色和字体
- 本地分支名称是绿色背景
- 远程分支名称是橘色和绿色混合的背景色
- 当前分支是加粗字体
- 分支tag是黄色背景
- 当前HEAD是黄色的圆点
- 黄色的方块代表提交有notes(git备注是用于给提交补充消息的,但是不会改变提交信息,参考git-notes)
有一篇英文的介绍文章:《Use gitk to understand git》
代码库操作
这些操作都作用在提交列表上,也就是最上面的面板。
右键单击提交信息
- 创建tag
- 创建分支
- 重置当前分支到这个提交(soft/mixed/hard)
- 挑选(cherry-pick)当前提交给当前分支(这个命令也不常用,我百度了一下关于git的cherry-pick命令)
右键单击分支名称
- 检出分支
- 删除分支
主菜单
reload
: 如果你在其他界面使用命令行操作了一些东西,想通过gitk刷新出来看list/choose references
: 要快速到指定分支,点击F2。显示出来的结果可能很多,可以通过下面的过滤框写一下模式。它不会模糊匹配,你要么写完分支名称,要么使用通配符*。 点选一个分支整个gitk就去到新分支了,不过弹出来的窗口还在,可以继续点其他分支。
浏览提交列表
最上面的面板就是提交列表。许多操作都有快捷键绑定。 比如下键可以使用n代替。不过知道了也没啥用。
- 上下键,还有pageup/pagedown键,作用显而易见;
- 左右键,上一个/下一个提交;
- shift+上下键,查下上一个/下一个匹配
浏览diff信息
下面的面板左边部分是diff信息,右面部分是diff的文件列表。
- 空格键:向前一页
- 退格键/删除键: 同上,不过反向
- f:下一个文件,左右两边都会移动
b:同上,不过是前一个文件
点击右侧文件:左侧会滚动到对应的diff
计算提交的差别
- 左键选中一个提交
- 找到另一个提交(可以使用滚动条,但不能使用键盘)
- 右键单击选择Diff this -> selected
现在可以和上面一样对比差别了。
查找提交
- 搜索提交信息:任何时候点击”/“都可以开始搜索提交信息。匹配的提交会被加粗,中文尤其明显。前面说过,可以使用Shift+上下键进行导航。
- 根据文件搜索:匹配到提交以后,在右下面板右击文件选择Highlight this only。
如果想匹配多个文件,可以右击其他文件,选择Highlight this too,这些文件不用是同一个提交里的。注意这时候搜索模式就从containing变成了touching paths。 - 根据代码搜索:把搜索模式改成adding/removing string即可。
导航提交
- diff面板显示提交的Parent和Child。点击对应的hash码可转过去
- diff面板显示了当前提交所属的分支信息。点击跳转到对应分支的head。
- 如果提交图太复杂,连接两个提交的线就会断开。点击线部分(不是圆点或者箭头部分),diff面板会显示这一部分对应的详情。
- 如果点击了箭头,你会看到箭头翻转了,当前提交没有变。实际上箭头连接的是两部分提交。
.gitignore
不生效
当你的项目已经push过后,后添加的文件.gitignore
会出现不生效的问题,这是因为本地有文件缓存,清除即可:1
git rm -r --cached .
.gitignore
规则
- 如
/node_modules
:根目录node_modules
文件夹 - 如
/node_modules/*
:根目录node_modules
文件夹及子目录/child/node_modules
文件夹 - 如
!/node_modules/test.json
:代表此文件不忽略; - 如
*.zip
:过滤所有zip后缀的文件 - 如
/pages/index.html
:过滤具体文件 - 如
**/node_modules
:过滤无论多少层级的node_modules
Author
My name is Micheal Wayne and this is my blog.
I am a front-end software engineer.
Contact: michealwayne@163.com