Git
Info
以下内容基于 2.X 版本.
Git 是一款版本控制系统 (Version control system, VCS). 名字的由来是项目创始人 Linus 的自嘲1, 该词在英语俚语代表 "令人讨厌的人".
暂存
Command | New Files | Modified Files | Deleted Files | Description |
---|---|---|---|---|
git add -A |
√ | √ | √ | Stage all files. |
git add . |
√ | √ | √ | Stage all files in current folder. |
git add --ignore-removal . |
√ | √ | × | Stage new and modified files only. |
git add -u |
× | √ | √ | Stage modified and deleted files only. |
提交信息
提交信息的编写方式可以参考 Conventional Commits, 里面列举了一些例子和优点.
可以借助工具 commitlint 来进行检查.
类型 | 描述 |
---|---|
refactor | 代码重构,既不修复错误也不添加功能. |
feat | 类型为 feat 的提交表示在代码库中新增了一个功能(这和语义化版本中的 MINOR 相对应). |
fix | 类型为 fix 的 提交表示在代码库中修复了一个 bug(这和语义化版本中的 PATCH 相对应). |
style | 不影响代码含义的变化(空白/格式化/缺少分号等). |
perf | 改进性能的代码更改. |
test | 添加确实测试或更正现有的测试. |
build | 影响构建系统或外部依赖关系的更改. |
docs | 只是更改文档. |
ci | 更改持续集成文件和脚本. |
chore | 其他不修改 src 或 test 文件. |
revert | commit 回退. |
忽略文件
不想使用 Git 进行跟踪和管理的文件可以在 .gitignore
文件中指定, 语法十分简洁易懂.
对于常见开发环境通常忽略的文件, 可以利用 gitignore.io (Web/CLI) 生成.
清空仓库
以下代码用于清空仓库指定分支的全部历史记录, 执行操作后提交历史将会永久丢失.
git checkout --orphan empty || exit 1
git branch -D main || exit 1
git add -A || exit 1
git commit -m 'feat: first commit' || exit 1
git push origin empty:main --force || exit 1
git checkout main || exit 1
git branch -D empty
git pull origin main --allow-unrelated-histories
配置 Git
# 设置用戶
git config --global user.name '<NAME>'
git config --global user.email '<EMAIL>'
# 设置默认主分支名称
git config --global init.defaultBranch main
# 设置 pull 模式
git config --global pull.rebase true
# 设置编辑器
git config --global core.editor 'nvim'
# 设置网络代理
git config --global http.proxy 'http://127.0.0.1:1234'
git config --global https.proxy 'http://127.0.0.1:1234'
git config --global column.ui auto
git config --global branch.sort -committerdate
# 设置命令别名
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
配置 GPG 签名
gpg --list-secret-keys --keyid-format=long
git config --global user.signingkey <KEY_ID>
git config --global user.signingkey <SUB_KEY_ID>!
git config --global commit.gpgsign true
详情请参考 GitHub Docs.
代码托管平台
以下平台提供了 Git 远程仓库托管服务:
使用平台进行对仓库托管还可以利用平台提供的相关功能, 但不应该产生依赖. 应确保项目随时可以脱离该平台并正常运作.
GitHub CLI
GitHub CLI 是 GitHub 官方提供的跨平台的命令行工具. 安装教程.
在 GitHub 因为安全问题禁用 Git 通过账户和密码登录后, 经过 GitHub CLI 配置后的 Git 可以按原样使用.
sudo pacman -S github-cli # Arch Linux
scoop install gh # Windows
gh auth login # 登录 GitHub 账号
gh auth setup-git # 配置 Git
gh extension install github/gh-copilot # 安装 Copilot 拓展
gh copilot explain "sudo apt-get" # 解释命令
gh copilot suggest "Undo the last commit" # 生成命令
常见错误
检查是否使用的正确的 gpg.exe
. 通过下面命令指定使用的 gpg.exe
: