832 字
4 分钟
Git 小贴士
2020-06-24
说说 git 那些不常用,但是很实用的功能。
精确操作
git add -p
会逐个显示文件中的每组改动,并询问是否要加入 index- y: 放入 index
- n: 不要放入 index
- e: 手动编辑需要加入 index 的部分,常用来拆分一个改动块
使用这个命令可以在命令行中操作将一个文件的部分修改提交到暂存区。在想拆分 commit 的时候非常方便。
修改作者
git commit --amend --author="NAME <[email protected]>" --no-edit
修改上一次作者
修改提交时间
git 可以通过环境变量更改提交时间哦
- export GIT_COMMITTER_DATE=“Jan 11 17:11:18 2018 +0800”
- export GIT_AUTHOR_DATE=“Jan 11 17:11:18 2018 +0800”
或者更直接一点
- git commit —amend —date=`date -R`
fork 的项目与原作者同步
看到很多人 fork 项目之后同步时都是手动打 merge 同步的,会平白无故多很多 merge 节点出来,正确的做法应该是增加一个 upstream
远端,在本地同步合并后推到自己的仓库。
git remote add upstream [email protected]:AUTHOR/PROJ.git
git fetch upstream
git rebase FETCH_HEAD
git merge --ff-only upstream/master
git push origin master
二分 debug
这个命令不是很常用,但是知道有这个命令的存在能在 debug 时节省很多时间
给定两个提交记录 git 辅助你二分查找 bug 的引入时间,同时支持运行脚本
git bisect start
git bisect bad
git bisect good v1.0.0
git bisect reset
git bisect start bad_commit good_commit
git bisect run test-error.sh
git blame
配合上一个命令,找到 bug 之后可以按行定位 bug 的生产者
同步其他分支
在远端 PR 被合并之后往往需要切换到主分支然后重现拉取代码,这会无意义地去重新触发一次旧版本的索引,使用下面这条命令可以在不切换分支的情况下更新 master 到最新
git fetch origin master:master
邮件协作
当你的项目在内网,而你又已经离职了的时候,只能把 commit 打出来然后发给维护者了
git format-patch -1 HEAD
从 HEAD 开始,往前生成 1 个补丁git am *.patch
应用补丁
使用 git hooks
如果你使用 node 项目,可以借助 husky 帮你配置 git hooks ,然后配合 lint-staged 和 commitlint 帮助规范项目
// package.json
{
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
"pre-commit": "lint-staged"
}
}
}
// lint-staged.config.js
module.exports = {
"*.{js,jsx}": ["eslint --fix", "git add"],
"*.css": ["stylelint --config .stylelintrc.css.js"],
"*.md": ["prettier --write", "git add"],
};
commit 规范
参考 commitlint ,主要包括以下几种
- feat: 新功能
- fix: 修复问题
- docs: 修改文档
- style: 修改代码格式,不影响代码逻辑
- refactor: 重构代码,理论上不影响现有功能
- test: 增加修改测试用例
- chore: 修改工具相关(包括但不限于文档、代码生成等)
附赠 Git 常见黑话
- PR: Pull Request. 拉取请求,给其他项目提交代码
- LGTM: Looks Good To Me. 没问题
OJBK,可以合并 - SGTM: Sounds Good To Me. 和上面那句意思差不多
- TL;DR: Too Long; Didn’t Read. 太长懒得看
- ACK: Acknowledgement. 确认,同意/接受变更
- PTAL: Please Take A Look. 你来瞅瞅?用来提示别人来看一下
- WIP: Work In Progress. 开发中,这个词在使用
git stash
的时候也见看到 - TBR: To Be Reviewed. 提示维护者进行 review
- CC: Carbon Copy 抄送