目录
Git 自用命令速查
1. 分支与合并 (Branching & Merging)
git branch # 列出所有本地分支 (当前分支用 * 标记)
git branch <name> # 创建一个新的分支
git branch -d <name> # 删除一个已经合并过的本地分支
git checkout <name> # 切换到指定的分支
git checkout -b <name> # 创建并立即切换到新的分支
git switch <name> # 切换分支 (推荐新指令)
git merge <name> # 将指定分支的更改合并到当前分支
git cherry-pick <commit_id> # 将其他分支的特定提交"复制"并应用到当前分支2. 撤销与修改 (Undo & Modify)
# 工作区与暂存区
git checkout -- <file> # 撤销对工作区单个文件的修改
git restore <file> # 丢弃工作区的修改 (新版本指令)
git reset HEAD <file> # 将文件从暂存区移回工作区 (不撤销修改)
# 提交回滚
git reset --soft HEAD^ # 撤销最近一次提交,保留修改在暂存区 (适合修正提交)
git reset --hard <commit_id> # 回退到指定版本,丢弃所有后续修改 (慎用)
git revert <commit_id> # 创建新提交来抵消旧提交 (安全,适合远程代码)
# 技巧: git revert -n 可回退代码但不自动 commit,便于检查
# 修改历史 (高级)
git commit --amend # 修改最后一次提交的信息或追加修改
# 技巧: message 中加 [skip ci] 可跳过 WorkFlows
git rebase -i HEAD~n # 交互式修改前 n 次的提交 (如 reword 改 message)
git push -f # 强制推送修改后的历史 (注意 Tag 不会自动随之移动)
git push --force-with-lease # 更安全的强制推送,防止覆盖他人提交
# 救命指令
git reflog # 查看所有 HEAD 移动记录,找回被 reset 误删的 commit3. 暂存 (Stash)
git stash # 将当前修改 (暂存区+工作区) 临时保存
git stash pop # 恢复最近一次保存的修改并从栈中删除4. 远程与查看 (Remote & Inspection)
git remote -v # 查看远程仓库地址
git pull # 拉取远程代码并合并
git push # 推送本地提交
git log # 查看提交历史
git diff # 查看差异(工作区与暂存区)
git diff --cached # 查看差异(暂存区与上次提交)5. 标签管理 (Tagging)
git tag # 列出所有标签
git tag <name> # 给当前 commit 打轻量标签 (如 v1.0)
git tag -a <name> -m "msg" # 打附注标签 (发布版本推荐)
git push origin --tags # 推送本地所有标签到远程
git push origin :refs/tags/<name> # 删除远程标签Git 远程仓库连接
git remote add origin https://github.com/username/my-project.git
git branch -M main
git push -u origin main # -u 它告诉 Git:"以后我的本地 main 分支就和远程的 origin/main 绑定了。"
git remote -vGit commit 规范
1. 提交结构 (Format Structure)
一个完整的 Git Commit 消息应该包含标题 (Subject)、正文 (Body) 和页脚 (Footer) 三个部分,各部分之间用空行分隔。
<type>(<scope>): <subject>
<body>
<footer>2. 提交类型 (Type) - 必需
这是提交消息的第一个词,用于说明本次提交的目的。
| Type | 描述 (中文) | 场景示例 |
|---|---|---|
| feat | 新功能 (Feature) | 添加了用户登录功能。 |
| fix | 修复 Bug (Bug Fix) | 修复了按钮点击时未响应的错误。 |
| docs | 文档 (Documentation) | 仅修改了 README 或注释。 |
| style | 代码风格 (Styling) | 格式化代码,移除多余空格,不影响代码逻辑。 |
| refactor | 重构 (Refactoring) | 代码重构,既不属于新功能也不属于 Bug 修复。 |
| test | 测试相关 (Testing) | 增加或修改了测试文件。 |
| chore | 杂项/辅助 (Chore) | 修改构建流程、依赖升级、辅助工具配置等。 |
3. 标题行规则 (Subject Line)
标题行是提交摘要,应该简短明了,遵循以下规则:
| 规则 | 说明 | 示例 |
|---|---|---|
| 字数限制 | 建议不超过 50 个字符 (方便日志查看)。 | feat(api): 增加用户注册接口 |
| 使用祈使句 | 使用现在时、祈使句(像命令一样),而不是过去时。 | 推荐:Fix bug / 避免:Fixed bug |
| 小写开头 | 提交类型后,主题描述请用小写字母开头。 | fix(auth): 修正密码校验逻辑 |
| 句末无点 | 结尾不要加句号 .。 | 保持简洁。 |
| Scope (可选) | 使用括号 () 标识此次修改影响的范围(如:api, ui, auth)。 | fix(layout): 修复移动端布局错位 |
4. 正文规则 (Body) - 可选
正文用于详细说明提交的细节,应遵循以下规则:
- 分隔空行:标题行后必须留一个空行。
- 解释原因:重点描述修改的原因和解决的问题(Why),而不仅仅是做了什么(What)。
- 细节说明:描述设计思路、替代方案、或潜在的副作用。
- 换行限制:建议每行不超过 72 个字符,以提高可读性。
5. 页脚 (Footer) - 可选
页脚通常用于关联 Issue 或标记重大变更。
关联 Issue:引用相关的 Issue 编号。
Closes #123(关闭 Issue 123)Refs #456(参考 Issue 456)
- 重大变更 (Breaking Change):如果本次修改不兼容旧版本,必须在页脚以大写
BREAKING CHANGE:开头进行说明。
示例
一个完整的、符合规范的提交消息可能如下所示:
feat(auth): 允许用户使用邮箱登录
这是本次更改的详细正文,解释了为什么需要增加邮箱登录功能。
原有的用户名登录限制性太强,为了优化用户体验,我们增加了兼容邮箱登录的校验。
本次修改包含了前端表单和后端API的变更。
BREAKING CHANGE: 移除了对旧版加密算法的支持。
Closes #123
好笔记,我抄