目录一、Git 的三大区域概念层二、核心 Git 命令如何让文件在这“四区”之间流转1. 从工作区 → 暂存区开始追踪改动2. 从暂存区 → 本地仓库形成版本记录3. 从本地仓库 → 远程仓库分享给队友4. 从远程仓库 → 本地仓库获取别人更新5. 撤销/回退操作重要三、状态表远程仓库比本地仓库新如何解决冲突1. 为什么会发生2. 解决流程三步走第一步把远程的新内容拉下来第二步处理合并两种情况3. 更安全的替代推荐新手用 rebase4. 如果你已经 push 了但被拒经典报错第二部分如何查看本地仓库有什么文件1. 查看工作区和暂存区的文件状态最常用什么是未追踪文件Untracked2. 查看所有被 Git 追踪的文件不显示未追踪的3. 查看当前目录下的所有文件Linux/Mac/Git Bash 通用4. 查看历史版本中的文件某个 commit 里有什么5. 快速对比工作区和最近一次 commit 的差异一、Git 的三大区域概念层这是所有 Git 操作的基础。你可以把文件的状态变化想象成“搬家”区域说明对应 Git 概念工作区 (Working Directory)你电脑上能直接看到的项目文件夹就是你正在编辑文件的地方。未跟踪 (Untracked) / 已修改 (Modified)暂存区 (Staging Area / Index)一个临时的“待提交清单”。你决定哪些修改要保存到仓库就先 add 到这里。已暂存 (Staged)本地仓库 (Local Repository)在你电脑上的.git隐藏目录。这里的提交是安全的、版本受控的。已提交 (Committed)远程仓库 (Remote Repository)放在 GitHub、GitLab 等服务器上的公共/协作仓库。已推送 (Pushed)二、核心 Git 命令如何让文件在这“四区”之间流转下面这张图是灵魂建议收藏text工作区 ──git add── 暂存区 ──git commit── 本地仓库 ──git push── 远程仓库 │ │ │ └──────git restore────┘ │ └────────────git reset HEAD─────────────────── ┘ └────────────────git fetch/git pull─────────────────────┘1. 从工作区 → 暂存区开始追踪改动命令git add 文件名或git add .添加所有改动作用把修改过的文件“打标签”告诉 Git 我准备提交这些。2. 从暂存区 → 本地仓库形成版本记录命令git commit -m 提交说明作用把暂存区的所有内容打包成一个快照永久存入本地仓库并生成一个 commit ID。3. 从本地仓库 → 远程仓库分享给队友命令git push origin 分支名如git push origin main作用把本地仓库的提交上传到 GitHub 服务器。4. 从远程仓库 → 本地仓库获取别人更新命令git fetch仅下载不合并git pull下载并自动合并到当前分支相当于 fetch merge5. 撤销/回退操作重要丢弃工作区改动git restore 文件名回到最近一次 commit 或 add 的状态从暂存区撤出git restore --staged 文件名文件改动还在但不再暂存回退本地提交git reset --soft HEAD~1撤回 commit改动回到暂存区 或git reset --hard HEAD~1彻底丢弃改动慎用三、状态表文件状态所在区域你能做什么Untracked / Modified工作区git add→ 暂存区Staged暂存区git commit→ 本地仓库或git restore --staged撤回Committed本地仓库git push→ 远程仓库或git reset回退Pushed远程仓库队友可通过git clone/git pull获取当你准备 push 之前建议按这个顺序检查远程仓库比本地仓库新如何解决冲突这是 Git 协作中最常见的场景。你 teammate 先 push 了代码而你不知道现在你想 pushGit 会报错拒绝。1. 为什么会发生远程仓库的commit 历史比你的本地仓库多出了几个新节点。Git 不允许你直接 push因为那样会覆盖掉队友的提交。2. 解决流程三步走第一步把远程的新内容拉下来git pull origin mainmain是你的分支名如果是master就写master第二步处理合并两种情况情况A没有冲突幸运Git 自动把远程的新内容和你的本地修改合并好了。你只需要重新 commit 并 push即可git push origin main情况B有冲突常见Git 会提示CONFLICT (content): Merge conflict in xxx.txt你需要手动解决冲突打开冲突文件你会看到类似这样的标记text HEAD 这是你本地写的代码 这是远程仓库队友写的代码 origin/main手动编辑删除、、这些标记保留你最终想要的代码可以全留可以只留一边也可以组合。保存文件。告诉 Git 冲突已解决git add 冲突文件名 git commit -m 解决了与远程仓库的冲突 git push origin main3. 更安全的替代推荐新手用 rebase如果你不想在历史中留下一个“合并提交”Merge Commit可以用rebase# 1. 拉取远程最新代码并把自己的提交“挪”到最新提交之后 git pull --rebase origin main # 2. 如果有冲突解决方式同上手动改文件 git add # 3. 继续 rebase 流程 git rebase --continue # 4. 最后 push因为历史被重写了必须加 --force-with-lease git push --force-with-lease origin main⚠️注意--force-with-lease比--force更安全它会检查远程是否有人又 push 了新东西如果有就停止防止覆盖别人的工作。4. 如果你已经 push 了但被拒经典报错! [rejected] main - main (non-fast-forward) error: failed to push some refs to github.com:... hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing解决方案重复上面的git pull→ 解决冲突 →git push流程即可。第二部分如何查看本地仓库有什么文件分两个维度查看当前工作区的文件列表和查看历史版本中的文件。1. 查看工作区和暂存区的文件状态最常用git status输出示例On branch main Your branch is behind origin/main by 2 commits. Changes to be committed: (use git restore --staged file... to unstage) modified: README.md Changes not staged for commit: (use git add file... to update what will be committed) modified: src/app.py Untracked files: (use git add file... to include in what will be committed) new_file.txt红色 工作区有修改还没 add绿色 已 add等待 commitUntracked 全新文件Git 还没开始追踪什么是未追踪文件Untracked想象 Git 是一个保安他只负责看管登记在册的文件。已追踪Tracked你的文件在保安的花名册上已经被git add过或commit过。保安会盯着这些文件的每一次改动。未追踪Untracked你的文件不在保安的花名册上。保安看到这个文件只会提醒你嘿这有个新文件你要不要让我管但他不会管它也不会自动把它加入版本控制。2. 查看所有被 Git 追踪的文件不显示未追踪的bashgit ls-files输出所有已经纳入版本控制的文件列表带完整路径。3. 查看当前目录下的所有文件Linux/Mac/Git Bash 通用bashls -la-l显示详细信息-a显示隐藏文件包括.git文件夹4. 查看历史版本中的文件某个 commit 里有什么查看最近一次提交包含哪些文件bashgit show --name-only查看某次具体 commit 的文件列表bash# 先找到 commit ID git log --oneline # 输出类似 # a1b2c3d (HEAD - main) 修复了登录bug # d4e5f6g 增加了用户管理模块 # 然后查看该 commit 的文件 git show --name-only a1b2c3d5. 快速对比工作区和最近一次 commit 的差异git diff --name-only只显示哪些文件被修改了不显示具体改了什么内容。其他怎么不克隆整个仓库只克隆仓库下的某个文件或者目录git clone和git pull都和“获取远程代码”有关但作用完全不一样本质区别是一个是第一次拿代码一个是在已有代码基础上更新。git merge vs git rebase 对比表对比项mergerebase是否改写历史不改历史会改写提交历史commit 数量产生一个 merge commit不额外增加 merge commit历史结构保留分叉结构非线性变成线性历史可读性分支结构清晰但复杂历史更干净、线性安全性高安全不影响已有 commit中可能改变 commit hash冲突处理一次性处理 merge 冲突每个 commit 可能都要处理冲突推荐场景团队协作、共享分支本地分支整理、提交前优化历史命令式创建远程仓库gh repo create Multi_Threads_Process --public --source. --remoteorigin --push --source. 指定本地项目目录作为源码来源 . 表示当前目录 也就是说把你现在这个文件夹里的所有代码作为仓库内容 使用“当前目录.”作为仓库内容来源 如果这个目录还不是 Git 仓库 会自动执行 git init 自动 git add . 自动 git commit --remoteorigin 给本地 git 仓库添加远程地址并命名为origin --push 创建完成后自动帮你 push 到 GitHub查看远程仓库地址最常用git remote -v查看远程仓库详细信息git remote show origin只看某个 remote 的 URLgit config --get remote.origin.url只想从 Git 仓库里下载clone其中的03目录可以用 sparse checkout稀疏检出避免把git clone --filterblob:none --no-checkout 仓库URL cd 仓库名 git sparse-checkout init --cone git sparse-checkout set 03 git checkout说明--filterblob:none不下载文件内容更省流量--no-checkout先不检出文件sparse-checkout set 03只要03目录最后git checkout才真正生成文件