SKILL.md 5.6 KB


name: git-commit-push

description: Git 提交和推送命令速查手册。提供暂存、提交、推送、修改提交、撤销、stash 等常用命令和场景示例。需要手动调用,使用 /git-commit-push 触发。

Git 提交和推送命令速查

基本提交流程

1. 查看状态

# 查看工作区状态
git status

# 查看具体改动
git diff

# 查看已暂存的改动
git diff --cached

2. 暂存文件

# 暂存所有修改
git add .

# 暂存指定文件
git add <文件路径>

# 暂存指定目录
git add <目录路径>

# 交互式暂存(选择性暂存)
git add -p

3. 提交

# 提交并写提交信息
git commit -m "提交信息"

# 打开编辑器写详细提交信息
git commit

# 暂存并提交(跳过 git add)
git commit -am "提交信息"

推送到远程

基本推送

# 推送到当前分支的远程分支
git push

# 推送到指定远程仓库的指定分支
git push origin main

# 首次推送并设置上游分支
git push -u origin <分支名>

# 强制推送(谨慎使用!)
git push -f
git push --force-with-lease  # 更安全的强制推送

推送标签

# 推送指定标签
git push origin <标签名>

# 推送所有标签
git push --tags

修改提交

修改最后一次提交

# 修改提交信息
git commit --amend -m "新的提交信息"

# 添加遗漏的文件到最后一次提交
git add <遗漏的文件>
git commit --amend --no-edit

# 修改提交信息和内容
git commit --amend

修改后推送

# 如果已经推送过,需要强制推送
git push --force-with-lease

撤销操作

撤销暂存

# 撤销所有暂存
git reset HEAD

# 撤销指定文件的暂存
git reset HEAD <文件路径>

# 或使用 restore(推荐)
git restore --staged <文件路径>

撤销工作区修改

# 撤销指定文件的修改
git checkout -- <文件路径>

# 或使用 restore(推荐)
git restore <文件路径>

# 撤销所有未暂存的修改
git checkout .

撤销提交

# 撤销最后一次提交,保留修改
git reset --soft HEAD~1

# 撤销最后一次提交,取消暂存但保留修改
git reset HEAD~1

# 撤销最后一次提交,丢弃所有修改(危险!)
git reset --hard HEAD~1

# 撤销最近 N 次提交
git reset --soft HEAD~N

暂存工作进度 (Stash)

基本用法

# 暂存当前修改
git stash

# 暂存并添加说明
git stash save "暂存说明"

# 暂存包括未跟踪的文件
git stash -u

# 查看暂存列表
git stash list

# 恢复最近的暂存
git stash pop

# 恢复指定的暂存
git stash apply stash@{0}

# 删除暂存
git stash drop stash@{0}

# 清空所有暂存
git stash clear

查看提交历史

# 查看提交历史
git log

# 简洁的单行显示
git log --oneline

# 查看最近 N 次提交
git log -n 5

# 查看图形化分支历史
git log --graph --oneline --all

# 查看指定文件的提交历史
git log <文件路径>

# 查看指定作者的提交
git log --author="作者名"

常见场景

场景 1: 提交代码并推送

git add .
git commit -m "feat: 添加新功能"
git push

场景 2: 修改刚才的提交信息

git commit --amend -m "新的提交信息"
git push --force-with-lease

场景 3: 临时切换分支

# 暂存当前工作
git stash

# 切换分支处理其他事情
git checkout other-branch

# 切回来恢复工作
git checkout original-branch
git stash pop

场景 4: 提交了错误的代码,需要撤回

# 撤销提交但保留修改
git reset --soft HEAD~1

# 修改代码
# ...

# 重新提交
git add .
git commit -m "正确的提交"

场景 5: 已经推送,但需要撤回最后一次提交

# 撤销提交
git reset --hard HEAD~1

# 强制推送(谨慎!)
git push --force-with-lease

场景 6: 解决 git pull 冲突

# 查看冲突文件
git status

# 手动编辑解决冲突,或选择使用某一方的版本
git checkout --ours <文件>   # 使用本地版本
git checkout --theirs <文件>  # 使用远程版本

# 标记为已解决
git add <文件>

# 完成合并
git commit -m "解决合并冲突"

# 或者放弃本次合并
git merge --abort

提交信息规范

建议使用语义化提交信息格式:

<类型>(<范围>): <简短描述>

<详细描述>

<关联信息>

常用类型:

  • feat: 新功能
  • fix: 修复 bug
  • docs: 文档修改
  • style: 代码格式调整(不影响功能)
  • refactor: 重构(既不是新功能也不是修复)
  • perf: 性能优化
  • test: 测试相关
  • chore: 构建、工具或配置修改

示例:

git commit -m "feat(账号组): 添加批量删除功能"
git commit -m "fix(广告计划): 修复创建时的参数校验问题"
git commit -m "refactor(utils): 优化水印添加工具类"

安全建议

  1. 推送前检查: 使用 git loggit diff 确认要推送的内容
  2. 避免强制推送: 尽量不使用 -f,使用 --force-with-lease 更安全
  3. 敏感信息: 确保不提交密码、密钥等敏感信息
  4. 提交前测试: 确保代码可以编译和运行
  5. 小步提交: 每次提交只包含一个逻辑修改,便于回滚和审查

配置优化

# 设置默认编辑器
git config --global core.editor "vim"

# 设置提交模板
git config --global commit.template ~/.gitmessage

# 显示中文文件名
git config --global core.quotepath false

# 设置默认推送行为
git config --global push.default current

# 设置 pull 默认使用 merge
git config --global pull.rebase false