返回文章列表

Git 常用命令速查手册

本文档重点整理了两类 Git 高频操作:代码回滚/撤销 和 远程仓库管理。

Admin
8 分钟阅读
1 次阅读
Git 常用命令速查手册

Git 常用命令速查手册

一、基础命令

命令说明
git clone <url>克隆远程仓库到本地
git status查看工作区/暂存区状态
git add <file>将文件添加到暂存区
git commit -m "message"提交暂存区内容到本地仓库
git log --oneline查看简洁的提交历史
git diff查看工作区与暂存区的差异
git diff --staged查看暂存区与最新提交的差异

二、回滚操作(Undo / 撤销)

1. 工作区修改撤销(未 add

bash
git checkout -- <file>          # 丢弃某个文件的修改
git restore <file>              # Git 2.23+ 推荐写法
git checkout .                  # 丢弃所有工作区修改(危险!)

2. 暂存区撤销(已 add,未 commit

bash
git restore --staged <file>     # 将文件移出暂存区(保留修改)
git reset HEAD <file>           # 旧写法,作用同上
git reset HEAD .                # 全部移出暂存区

3. 本地提交撤销(已 commit,未 push

① 修正最近一次提交(不产生新提交)

bash
git commit --amend -m "新的提交信息"      # 修改提交信息
git add <遗漏的文件> && git commit --amend  # 追加文件到上次提交

② 回退到某个历史版本(reset

  • --soft:保留工作区和暂存区修改(相当于撤销 commit,但修改还在)
  • --mixed(默认):保留工作区,清空暂存区
  • --hard彻底删除所有后续修改(危险!)
bash
git reset --soft HEAD~1          # 撤销最后一次 commit,代码保留
git reset --mixed HEAD~1         # 撤销 commit 和 add,代码保留
git reset --hard HEAD~1          # 彻底删除最后一次 commit 的修改
git reset --hard <commit-id>     # 回滚到指定 commit(丢弃之后所有修改)

注意reset 会改变历史,若已经 push 到远程,请用 revert 或强制推送(谨慎)。

③ 安全撤销已 push 的提交(revert

revert 会生成一个反向提交,不破坏历史,适合公共分支。

bash
git revert HEAD                 # 撤销最近一次提交(生成新 commit)
git revert <commit-id>          # 撤销指定的某个提交
git revert HEAD~3..HEAD         # 撤销最近 3 个提交(需按顺序)

4. 恢复被删除的分支或提交(reflog

只要没有执行 git gc,所有操作都可以找回:

bash
git reflog                       # 查看所有 HEAD 变动记录
git checkout -b <新分支名> <commit-id>   # 基于某 commit 创建新分支
git reset --hard <commit-id>     # 直接恢复到某 commit(慎用)

三、远程仓库操作

1. 管理远程仓库别名

bash
git remote -v                    # 查看所有远程仓库及地址
git remote add <别名> <url>      # 添加远程仓库,如 git remote add origin https://...
git remote remove <别名>         # 删除远程仓库别名
git remote rename <旧名> <新名>   # 重命名,如 git remote rename origin upstream
git remote set-url <别名> <新url> # 修改远程仓库地址

2. 拉取远程内容

bash
git fetch <远程名>               # 下载远程最新对象,但不合并
git fetch --prune                # 拉取时删除本地已不存在的远程分支引用
git pull <远程名> <分支名>        # fetch + merge(等价)
git pull --rebase                # fetch + rebase(保持历史线性)

3. 推送本地内容

bash
git push <远程名> <本地分支>:<远程分支>   # 完整语法
git push origin main              # 将本地 main 推送到远程 origin/main
git push -u origin main           # 推送并建立上游跟踪(后续可直接 git push)
git push --all origin             # 推送所有本地分支到远程
git push --tags                   # 推送所有本地标签(默认不自动推送)

4. 删除远程分支 / 标签

bash
# 删除远程分支
git push --delete origin <分支名>
git push origin :<分支名>          # 旧语法

# 删除远程标签
git push --delete origin <tag名>
git push origin :refs/tags/<tag名>

# 删除本地标签
git tag -d <tag名>

5. 跟踪远程分支(本地创建与远程同名的分支)

bash
git checkout -b <本地分支> <远程名>/<远程分支>   # 旧写法
git checkout --track origin/feature            # 自动创建同名本地分支并跟踪
git branch -u origin/feature                   # 为现有本地分支设置上游

6. 查看远程分支与本地分支关系

bash
git branch -a                    # 查看所有分支(含远程)
git branch -vv                   # 查看本地分支与远程分支的跟踪关系
git remote show origin           # 显示远程仓库的详细信息(包括过期分支)

四、常用组合场景

场景1:提交后发现漏了文件,不想增加新 commit

bash
git add <遗漏文件>
git commit --amend --no-edit      # 追加到上一次提交,不修改信息

场景2:误提交到错误分支,需要移动提交

bash
git log --oneline                 # 找到刚提交的 commit-id
git reset HEAD~1 --soft           # 撤销最后一次提交(保留修改)
git stash                         # 暂存修改
git checkout <正确分支>
git stash pop
git add && git commit

场景3:远程分支被误删,本地还有该分支

bash
git push origin <本地分支名>:<远程分支名>   # 重新推送上去即可

场景4:强制覆盖远程分支(慎用,会覆盖他人提交)

bash
git push --force origin <分支名>           # 强制推送(可能覆盖他人代码)
git push --force-with-lease origin <分支名> # 更安全的强制推送(若远程有新提交则拒绝)

场景5:删除本地已不存在的远程分支引用(清理 git branch -a 里的幽灵分支)

bash
git remote prune origin            # 删除本地 origin/xxx 但远程已不存在的引用
git fetch --prune                  # 拉取时自动修剪

五、实用小技巧

需求命令
临时保存工作区,切分支git stash / git stash pop
复制某几个 commit 到当前分支git cherry-pick <commit-id>
合并多个 commit 为一个git rebase -i HEAD~n 然后 squash
生成补丁文件git format-patch -1 <commit-id>
查找哪次提交引入了某个 buggit bisect start

注意事项

  • 永远不要对已经推送到公共仓库的提交执行 reset --hardpush --force,除非你是唯一使用者。
  • 使用 revert 代替 reset 来撤销公共分支上的变更。
  • git push --force 前建议先 git fetch 并确认没有其他人基于当前分支工作。
  • 定期执行 git fetch --prunegit remote prune origin 保持本地远程分支列表整洁

登录后发表评论

请先登录账号后再发表评论