这篇文章是为那些像我一样喜欢通过命令行使用git的开发者编写的。如果你喜欢 GUI,希望你仍然能在这里找到一些有用的东西
Git 别名
Git 别名是一种强大的工作流工具,可以为常用的 Git 命令创建快捷方式
最简单来说,git alias 就是为长命令创建一个快捷方式(短命令),使它们更容易记忆,你可以更快地输入。
语法
git config --global alias.<shortcut> <original-command>使用 --global 标志告诉 git 该别名将在所有项目中使用(否则,它只会在你当前工作的项目中有效!)
如果 original-command 包含空格,请使用引号('')。
对我来说,我几乎为所有日常工作的命令创建了别名。
Git status
在提交前检查更改:
git config --global alias.st status# 现在使用 `git st` 代替 `git status`
git st
On branch v2
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: components/ui/twemoji
modified: css/tailwind.css
modified: data/blog/git-notes.mdx
no changes added to commit (use "git add" and/or "git commit -a")提示:使用带有
--short标志或-s的git st来查看更改的简短格式,并且...你知道的 - 也为这个命令创建一个别名
git config --global alias.s 'status --short'# 现在使用 `git s` 代替 `git st`
git s
M components/Image.js
M data/blog/git-notes.mdx
?? public/static/images/force-with-lease.jpg结果更清晰,输入更快,对吧?
Git commit
git config --global alias.cm 'commit -m'提交更改(先 add/stage 更改):
git cm "Initial commit"TIP
如果更改仅针对现有文件(既不是新文件也不是已删除文件),请使用 --all 或 -a 标志,这样你就不必在提交前添加或暂存更改
git config --global alias.cam 'commit -am'# 现在不用使用 2 个 git 命令
git add style.css # `style.css` 已经存在,不是新文件!
git cm "Update style"
# 只使用 1 个命令
git cam "Update style"Git stash
将脏工作目录中的更改暂存起来
正如定义所说,当你需要在从远程仓库拉取新内容之前**"暂存"**更改时,使用 git stash:
# 太短了,不需要创建别名
git stash拉取后应用暂存的更改:
git stash pop为它创建一个别名:
git config --global alias.sp 'stash pop'
# 现在
git sp
# 等同于
git stash popGit pull/push
始终使用 pull rebase 和 force push 来保持干净的提交树!
pull rebasegit config --global alias.prb 'pull origin --rebase'# 现在 git pull origin --rebase main # 等同于 git prb main # 或 git prb master如果在变基后发生冲突怎么办?
使用
git diff列出所有冲突,并为此命令创建一个别名:git config --global alias.cf 'diff --name-only --diff-filter=U'# 列出所有冲突 git cf # 解决所有冲突然后暂存更改 git add . # 完成变基 git rebase --continueforce push当你完成解决变基后发生的冲突时,我们需要强制推送更改到远程仓库:
git config --global alias.pf 'push --force-with-lease' # 现在变基后 git pfTL;DR
--force标志会使 git 用本地更改覆盖远程仓库,而不比较变基后远程可能的更新,如果两个开发者在同一个分支上工作,这可能很危险。
相反,--force-with-lease确保只有在上游不存在更新时才能推送。
Git checkout
git config --global alias.co 'checkout'
# 例如
git co main创建一个新分支:
git config --global alias.cob 'checkout -b'
# 例如
git cob feature-xTIP
使用 git co - 切换到上一个分支。
例如:
git branch
dev
* feature-x-y-z__ISSUE_ID
main
# 当前分支是 `feature-x-y-z__ISSUE_ID`
# 切换到 `dev`
git co dev
# 做一些事情
# 提交 ...
# 现在要回到 `feature-x-y-z__ISSUE_ID` 使用
git co -
# 而不是
git checkout feature-x-y-z__ISSUE_IDGit diff
在提交前检查更改(通常,我用这个来确保我的代码中没有留下 debug、hardcode 或 console.log)。
git config --global alias.d 'diff'
# 例如
git d style.css注意
所有你的别名都可以在 ~/.gitconfig 文件(MacOS)中找到。你可以直接打开这个文件并编辑任何你想要的别名。
vim ~/.gitconfig# 在配置文件中找到别名部分
[alias]
s = status --short分支命名约定
分支命名约定是一种命名分支的标准方式,使团队成员更容易理解分支的目的和状态
在团队中工作时,遵循一致的分支命名约定是很重要的。这里有一些常见的约定:
功能分支
feature/feature-name
# 或
feature/feature-name__ISSUE_ID修复分支
fix/bug-name
# 或
fix/bug-name__ISSUE_ID热修复分支
hotfix/bug-name
# 或
hotfix/bug-name__ISSUE_ID发布分支
release/version-number
# 或
release/version-number__ISSUE_IDGit 工作流
Git 工作流是一种使用 Git 的标准方式,使团队成员更容易协作
有几种常见的 Git 工作流:
Git Flow
Git Flow 是一种基于分支的工作流,围绕项目发布构建。它定义了几种类型的分支:
master:生产就绪代码develop:下一个发布的开发feature/*:新功能release/*:发布准备hotfix/*:生产修复
GitHub Flow
GitHub Flow 是一种更简单的工作流,只有一个主分支(main)和功能分支。
- 从
main创建一个分支 - 添加提交
- 打开一个拉取请求
- 讨论和审查代码
- 部署和测试
- 合并到
main
GitLab Flow
GitLab Flow 是 Git Flow 和 GitHub Flow 的混合,增加了环境分支。
main:预生产代码production:生产代码feature/*:新功能
Git 钩子
Git 钩子是在特定 Git 事件发生时运行的脚本
Git 钩子可以用来自动化任务,如:
- 在提交前运行测试
- 在推送前检查代码风格
- 在合并前运行构建
常见的 Git 钩子
pre-commit:在提交前运行pre-push:在推送前运行pre-receive:在接收推送前运行post-receive:在接收推送后运行
使用 Husky 设置 Git 钩子
Husky 是一个使 Git 钩子更容易使用的工具。
# 安装 husky
npm install husky --save-dev
# 启用 git 钩子
npx husky install
# 添加一个钩子
npx husky add .husky/pre-commit "npm test"Git 提交消息
Git 提交消息是描述更改的短消息
好的提交消息应该:
- 简短(不超过 50 个字符)
- 使用祈使语气("添加功能"而不是"添加了功能")
- 解释为什么而不是如何
常规提交
常规提交 是一种提交消息的格式约定,使自动化工具更容易处理。
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]常见的类型:
feat:新功能fix:错误修复docs:文档更改style:不影响代码含义的更改(空格、格式等)refactor:既不修复错误也不添加功能的代码更改test:添加或修正测试chore:对构建过程或辅助工具的更改
例如:
feat(auth): add login page
Add a login page with email and password fields.
Closes #123Git 忽略文件
Git 忽略文件是一个告诉 Git 忽略哪些文件的文件
.gitignore 文件用于指定 Git 应该忽略的文件和目录。
常见的忽略模式
# 忽略所有 .log 文件
*.log
# 忽略 node_modules 目录
node_modules/
# 忽略所有 .env 文件
.env*
# 但不忽略 .env.example
!.env.example全局忽略文件
你可以创建一个全局忽略文件,适用于所有 Git 仓库:
git config --global core.excludesfile ~/.gitignore_globalGit 别名(高级)
除了基本的别名,你还可以创建更高级的别名来自动化复杂的任务
使用 Shell 命令
你可以在别名中使用 Shell 命令:
git config --global alias.last '!git log -1 HEAD'创建自定义命令
你可以创建自定义命令来自动化复杂的任务:
git config --global alias.unstage 'reset HEAD --'# 现在
git unstage file.txt
# 等同于
git reset HEAD -- file.txt结论
这些是我在日常工作中使用 Git 的一些关键笔记。希望它们对你有所帮助!
如果你有任何问题或建议,请在下面的评论中告诉我。
编码愉快!

