当前位置: 首页 > news >正文

Git 命令 作用、常用选项、示例、何时使用与注意事项指南

说明:Git 的命令很多(尤其是 plumbing 层),这里覆盖了“所有常用 + 重要高级命令”。某些非常罕见或极底层的 plumbing 我也列出并简短说明,便于有经验者参考。

一、入门与基础概念(必读)

  • 工作区(Working Directory):你看到的文件树。
  • 暂存区(Index/Staging Area):git add 放入的快照,下一次 commit 的内容来自这里。
  • 本地仓库(.git):提交记录和对象存储。
  • 远程仓库(remote):例如 origin,用于协作。
  • 提交(commit):记录快照,包含元数据(作者、时间、父提交)。

二、配置与身份(必做)

git config — 管理 Git 行为与身份

  • 作用:设置用户名、邮箱、别名、差异工具、credential helper 等。

  • 常用:

    • git config --global user.name "Your Name"
    • git config --global user.email "you@example.com"
    • git config --global core.editor "code --wait"
    • git config --list
  • 备注:--system--global--local(仓库)优先级:local > global > system。

三、仓库初始化与克隆

git init

  • 作用:在当前目录创建 .git,把目录变成 Git 仓库。

  • 示例:

    • git initgit init myrepo
  • 何时用:创建新项目仓库。

  • 注意:不会创建远程关联。

git clone

  • 作用:从远程仓库拷贝完整仓库(含历史)到本地并自动设置 origin

  • 常用:

    • git clone https://.../repo.git
    • git clone --depth 1 <url>(浅克隆,仅最新提交)
    • git clone -b branchname <url>(克隆并检出指定分支)
  • 注意:大仓库或 LFS 文件可能需要额外选项。

四、查看状态与差异(工作流核心)

git status

  • 作用:显示工作区/暂存区状态(modified, staged, untracked)。
  • 示例:git status -s(短格式)

git add

  • 作用:把文件快照放入暂存区(Index)。

  • 常用:

    • git add file
    • git add .(添加当前目录全部变化,包括新文件)
    • git add -p(交互式按片段选择更改)
  • 注意:add 是将当前版本快照放到 index,不是直接提交。

git diff

  • 作用:比较改变

  • 常用:

    • git diff(工作区 vs 暂存区)
    • git diff --staged / git diff --cached(暂存区 vs 最近一次提交)
    • git diff <commit1> <commit2>
  • -U, --word-diff 等用于格式化输出。

git rm / git mv

  • git rm file:删除并标记删除(会在下次 commit 生效)
  • git mv old new:重命名(等同于 mv + git add/rm

五、提交(commit)与日志(history)

git commit

  • 作用:把暂存区快照写入本地仓库,生成新的提交对象。

  • 常用:

    • git commit -m "message"
    • git commit -a -m "msg"(跳过 git add,自动暂存已追踪文件的更改)
    • git commit --amend(修改最近一次提交—用于修改提交信息或合并新增更改)
  • 注意:--amend 会改变历史,已 push 的提交应谨慎改动。

git log

  • 作用:查看提交历史。

  • 常用:

    • git log --oneline --graph --decorate --all(漂亮树状视图)
    • git log -p(显示每次提交的 diff)
    • git log --since="2 weeks ago" --author="Alice"
  • 讲解:--graph 很适合查看分支/合并结构。

git show

  • 作用:显示单次提交详情(patch、元数据)
  • 示例:git show 7a1b2c3

git blame

  • 作用:对于文件的每一行显示最后改动的提交/作者(定位责任)
  • 示例:git blame -L 1,120 file.c(只看前120行)

六、撤销/恢复(非常重要)

这类命令能破坏历史或本地改动,务必小心。

git restore(新命令,替代某些 checkout 用法)

  • 恢复文件到 HEAD 或某提交状态:

    • git restore file(把工作区文件恢复为 HEAD 的版本)
    • git restore --staged file(从暂存区移除,但保留工作区修改)

git reset

  • 作用:移动当前分支的 HEAD 指针,可选择是否更改暂存与工作区。

  • 模式:

    • --soft <commit>:只移动 HEAD,保留暂存区与工作区(适合合并提交但保留改动以重新 commit)
    • --mixed <commit>(默认):移动 HEAD 并重写暂存区,但保留工作区(撤销已暂存)
    • --hard <commit>:移动 HEAD、重写暂存区和工作区(彻底回退,危险
  • 示例:git reset --hard HEAD~1

git revert

  • 作用:创建一个新的提交来反向应用指定 commit 的改动(安全用于已推送的历史)
  • 示例:git revert 1234abcd

git clean

  • 作用:删除未跟踪文件
  • 常用:git clean -fd(删除未追踪目录),-x 包括忽略文件
  • 注意:危险,先用 -n 预览。

七、分支管理(核心协作手段)

git branch

  • 查看:git branch(当前分支有 *
  • 创建:git branch feature
  • 删除:git branch -d feature(若未合并会失败),强制:-D

git switch / git checkout

  • git switch <branch>(显式切换分支)
  • git switch -c <branch>(创建并切换)
  • 旧式:git checkout <branch>(既能切分支也能检出文件/commit,功能混杂)

git merge

  • 合并其他分支到当前分支。
  • 示例:git merge feature(若冲突,手动解决后 git addgit commit
  • 合并策略:--no-ff(强制保留 merge commit)

git rebase

  • 变基,把当前分支的提交“移动”到目标分支之上,保持直线历史。

  • 常用:

    • git rebase develop
    • 交互式:git rebase -i HEAD~5(编辑、合并、删除提交)
  • 注意:对已 push 的分支做 rebase 会重写历史,需要团队协调。

git cherry-pick

  • 作用:把某个提交复制(应用)到当前分支(不会拷贝分支)
  • 示例:git cherry-pick 1a2b3c

八、远程仓库(pull/push/fetch 等)

git remote

  • 查看远程:git remote -v
  • 添加:git remote add origin <url>
  • 删除:git remote remove origin

git fetch

  • 拉取远程更新到本地(不会自动合并)
  • git fetch origingit fetch --all

git pull

  • git fetch + 自动 merge(默认)或 rebasegit config pull.rebase true
  • 示例:git pull origin maingit pull --rebase

git push

  • 推送分支到远程:

    • git push origin main
    • 首次推送并设置上游:git push -u origin feature
  • 强制推送(危险):git push --force--force-with-lease(推荐后者更安全)

九、标签(发布/版本管理)

git tag

  • 轻量标签:git tag v1.0
  • 注释标签:git tag -a v1.0 -m "release"
  • 推送标签:git push origin v1.0git push origin --tags
  • 删除本地:git tag -d v1.0,删除远程:git push origin :refs/tags/v1.0

十、暂存与临时保存(stash)

git stash

  • 临时保存工作区改动(并把工作区恢复到干净状态)

  • 命令:

    • git stash(保存)
    • git stash list
    • git stash apply(应用,但保留 stash)
    • git stash pop(应用并移除 stash)
    • git stash push -m "msg" --include-untracked
  • 场景:切分支修紧急 bug,但不想提交当前未完成工作。

十一、子模块(submodule)

git submodule

  • 添加:git submodule add <repo> path
  • 初始化:git submodule init
  • 更新(拉取并检出):git submodule update --init --recursive
  • 在 CI 常见命令:git submodule update --init --recursive --remote
  • 注意:子模块本质是父仓库跟踪一个具体的提交哈希,管理复杂,常见陷阱包括:忘记 --init、本地修改阻止 checkout、LFS 问题等。

十二、Git LFS(大文件)

  • 安装与初始化:git lfs install
  • 跟踪类型:git lfs track "*.bin"(修改 .gitattributes
  • 拉取 LFS 对象:git lfs pull
  • 常见问题:证书/权限/代理会导致 smudge filter lfs failed,需要配置 http.sslCAInfoGIT_LFS_SKIP_SMUDGE=1 等。

十三、打包/导出/补丁

git archive

  • 将某个 commit/tree 导出为 tar/zip:

    • git archive --format=tar HEAD | gzip > project.tar.gz

git format-patch / git am

  • 生成邮件补丁:git format-patch origin/main(生成 .patch 文件)
  • 应用补丁:git am <0001-something.patch>

git apply

  • 将补丁应用到工作区(不创建 commit):git apply patch.diff

十四、审查/排查工具

git bisect

  • 二分查找引入 bug 的提交:

    • git bisect start
    • git bisect bad(当前为坏)
    • git bisect good <commit>
    • 之后 Git 会 checkout 中间提交,你测试并 git bisect good/bad,直到定位到引入问题的 commit。

git fsck

  • 检查对象库完整性:git fsck --full

git reflog

  • 查看 HEAD 与引用的变动历史(即便分支被删,提交哈希仍可见):git reflog

git blame

  • 每行责任追踪(见上)

十五、高级重写历史(危险区)

git rebase -i

  • 交互式变基,合并/修改/重新排序提交,是清理历史的强大工具。
  • 注意:变基会 rewrite history,不要在公共分支对外推送后随意变基。

git filter-branch(已被弃用,推荐 git filter-repo

  • 重写历史(修改文件路径/删除敏感信息),示例(旧方式):

    • git filter-branch --tree-filter 'rm -f password.txt' -- --all
  • 推荐使用 git filter-repo(更快/更安全)。

十六、低层 plumbing(供高级用户/脚本调用)

  • git hash-object -w file:把文件写入对象库,返回哈希。
  • git cat-file -t <hash> / git cat-file -p <hash>:查看对象类型/内容。
  • git update-index:直接操作索引(暂存区)。
  • git rev-parse:把 refs 转成哈希,脚本里常用:git rev-parse --abbrev-ref HEAD
  • git ls-tree:查看 tree 对象内容。
  • git for-each-ref:列 refs(脚本用)。

十七、工作树(worktree)

git worktree

  • 允许在同一仓库并行检出多个 HEAD(无需多次 clone)

  • 示例:

    • git worktree add ../worktree-branch feature(在上层创建新目录并检出 feature)
  • 场景:同时编译两个分支、review 代码时非常实用。

十八、钩子(hooks)

  • Git hooks 位于 .git/hooks,可以触发脚本(如 pre-commit, pre-push, post-commit, pre-receive 等)。
  • 常见用法:代码风格检查(pre-commit)、运行单元测试(pre-push)、CI 集成(server-side hooks)。
  • 注意:默认示例文件为 .sample,需要复制并赋可执行权限。

十九、别名(Aliases)

  • 提升效率:git config --global alias.st status,之后 git st 就相当于 git status

  • 常见别名:

    • git config --global alias.co checkout
    • git config --global alias.br branch
    • git config --global alias.ci commit
    • git config --global alias.lg "log --oneline --graph --decorate"

二十、常见工作流与最佳实践(建议)

  • 每次提交保持单一职责:一个 commit 做一件事,提交信息要清晰(主题行 + 空行 + 说明)。
  • 使用 feature 分支开发,PR/MR 进行代码审查(避免直接在 main 上开发)。
  • 使用 --force-with-lease 替代 --force,防止覆盖别人新推的更改。
  • 在变更历史之前与团队沟通(rebase 会 rewrite 历史)。
  • 为大文件使用 Git LFS,并在 CI 中注意 LFS 对 agent 的依赖。
  • 脚本/自动化中尽量使用 porcelain(常用)命令和 rev-parse 等安全解析。

二十一、常见场景命令速查(便于copy-paste)

  • 初始化:

    • git init
    • git clone <url>
  • 提交:

    • git add .
    • git commit -m "msg"
  • 分支:

    • git checkout -b feature
    • git branch -d feature
  • 合并/变基:

    • git merge feature
    • git rebase develop
  • 远程:

    • git fetch
    • git pull --rebase
    • git push -u origin feature
  • 恢复:

    • git restore file
    • git reset --hard HEAD~1
    • git revert <commit>
  • 子模块/LFS:

    • git submodule update --init --recursive
    • git lfs install && git lfs pull
  • 查历史/定位:

    • git log --oneline --graph --decorate
    • git blame file
    • git bisect startgit bisect good/bad

二十二、常见误区与注意点(常见坑)

  • git pull 不知道会 merge 还是 rebase:推荐 git pull --rebase 或配置 pull.rebase true
  • 在公共分支做 git commit --amendrebase 后强推,会破坏别人的历史。
  • git reset --hardgit clean -fdx 会彻底删除未保存内容,先用 git status/git stash
  • 误用 git filter-branch 导致仓库变大或出错,使用 git filter-repo 替代。
  • LFS 文件下载失败常由证书、权限或代理导致,不是仓库内容本身坏掉。

二十三、学习与排查建议

  • 熟练掌握 statusaddcommitlogdiffbranchcheckout/switchmergerebaseresetstash
  • 经常使用 --oneline --graph 观察分支结构。
  • CI 环境中把 git lfs install 放到构建前步骤。
  • 需要做历史清理时,先在本地或备份仓库做实验再应用到远程。

http://www.dtcms.com/a/606522.html

相关文章:

  • 太原制作网站企业更换网站服务器
  • 深入理解 Python 的属性化方法
  • 北京网站备案拍照的地点河北建设厅网站开通账号
  • AI Agent记忆系统深度实现:从短期记忆到长期人格的演进
  • APScheduler入门:轻松掌握Python任务调度
  • LLMs之 Ranking:OpenRouter LLM Rankings的简介、安装和使用方法、案例应用之详细攻
  • 算法题(Python)链表篇 | 3.翻转链表
  • 找个免费的网站这么难吗用jsp做的二手交易网站
  • 网站后台申请邮箱手机网站 方案
  • 新站突然网站停止收录给公司做个网站多少钱
  • 【C语言实战:实现数组的重复拼接(动态内存+指针参数详解)】
  • wordpress文章付费可看温岭新站seo
  • React zustand todos案例(带本地存储localStorage、persist)todoStore.ts
  • mac配置 unity+vscode的坑
  • 极速网站推广专家wordpress综合网
  • 上海定制网站建设公司网站域名什么意思
  • 【OpenCV + VS】直方图与模糊操作
  • 代码随想录 435.无重叠区间
  • 【AVL树与红黑树】:告别“瘸腿”树,体验平衡的艺术
  • 智慧团建网站入口官网有什么做ppt的网站吗
  • 机器人“小脑”萎缩,何谈“大脑”智慧?六维力/关节力传感器才是“救命稻草”
  • 基于SpringBoot的图书馆管理系统的设计与实现
  • SpringCloud快速通关(中)
  • 性价比高的时序数据库哪个专业
  • 邵阳高端网站建设做响应式网站的物流
  • 网站定制开发哪家厉害网站登录界面源码
  • 自己电脑做网站服务器违法吗上海网站建设最好的公司排名
  • C++-vector-back子函数和std::move函数详细介绍
  • 07.指针
  • 【gas优化】2.9 使用sstore2或sstore3存储大量数据