Loading......

文章背景图

从零上手 Git:核心概念与常用命令总结

2026-04-01
15
-
- 分钟
|

💡 个人学习背景:

很早之前了解 GitHub 时,就对 Git 有了初步印象,但因不涉及前端、后端方向,一直没有实际使用场景,加上有一定学习门槛,所以未深入学习。

之前维护个人博客版本,也只是简单复制粘贴打包,直到有 Codex 等编程 CLI 工具协助,降低了学习和使用成本,才开始用 Git 管理项目代码托管、版本控制,特此整理常用知识点,方便后续查阅复习。

📌 文章说明:这是一份面向日常开发(个人 + 团队)的 Git 实用笔记,涵盖常见操作、作用、命令示例及问题排查,重点突出高频用法,适合新手入门和日常查阅。


一、Git 是什么? 🤔

Git 是一个 分布式版本控制系统,核心作用是记录代码的变更历史,支持多人协作开发,解决“代码修改回退、多人开发冲突、改动追溯”等问题。

✅ 通俗理解(好记不绕):

  • ⏳ 一个“可回退”的时间机器:改乱代码、删错文件,能随时回到之前的正确版本

  • 👥 一个“可并行开发”的协作工具:多人同时开发不同功能,互不干扰,最后轻松整合

  • 🔍 一个“可追踪”的审计系统:每一次修改都能查到“谁改的、什么时候改的、改了什么”

🌟 核心价值(必记):

  • 代码改错 / 删错 → 可回退

  • 多人同时开发 → 不互相覆盖

  • 所有改动 → 可追溯、可审计


二、Git 三个核心区域🚨

日常所有 Git 操作,都围绕这三个区域展开,搞懂它们,就能理清 80% 的 Git 逻辑。

  1. 工作区(Working Directory) 📝

    1. 就是你当前正在编辑的文件目录(比如电脑里的项目文件夹)

    2. 特点:改了文件但没执行 git add 时,所有改动都只在工作区,Git 还没“记录”这些改动

  2. 暂存区(Staging Area / Index) 📦

    1. 相当于“提交缓冲区”,通过 git add 命令,选择“本次要提交的改动”

    2. 特点:可以精确控制提交内容(比如只提交部分文件的改动),避免一次性提交所有修改

  3. 本地仓库(Local Repository) 💾

    1. 通过 git commit 命令,把暂存区的内容“快照”保存到本地仓库,形成一次提交记录

    2. 特点:提交后,改动就被永久记录在本地(电脑里),即使关闭软件也不会丢失

�补充:远程仓库(Remote Repository) 🌐 就是 GitHub、GitLab 等平台上的仓库,相当于“云端备份 / 共享中心”,通过 git push(上传)、git pull(下载)和本地仓库同步,方便多人共享代码。

2.1 关键概念速览

  • 提交(Commit) 📸 - 概念:一次代码快照,记录某个时间点“被暂存的所有改动” - 理解:像游戏里的“存档点”,每一次提交都有唯一的 ID(哈希值),后续可通过这个 ID 回退到该版本

  • 分支(Branch) 🌿 - 概念:指向一串提交历史的“轻量指针”(不是复制整个项目,占用空间极小) - 理解:相当于“并行开发轨道”,比如在 main(主分支)之外,新建 feature/xxx(功能分支)开发新功能,不影响主分支的稳定代码

  • 推送(Push) 📤 - 概念:把本地分支的新提交,上传到远程仓库 - 注意:只有 push 后,团队成员和代码托管平台(如 GitHub)才能看到你的最新改动

  • 拉取(Pull) 📥 - 概念:把远程仓库的最新更新,同步到本地并合并到当前分支 - 建议:开始开发前先 pull,避免基于旧代码开发,导致后续冲突

  • 合并(Merge) 🧩 - 概念:把一个分支的改动,整合到另一个分支(比如功能开发完成后,把功能分支合并回主分支) - 注意:合并时可能出现冲突,这是正常现象,不是错误


三、初始化与克隆

3.1 初始化本地仓库(从0创建)

🔧 作用:把当前电脑上的文件夹,变成 Git 可管理的仓库(会生成隐藏的 .git 目录,存储 Git 配置和历史记录)

git init

✨ 常用优化写法(直接指定主分支名为main,避免默认分支名混乱):

git init -b main

3.2 克隆远程仓库(下载已有项目)

🔧 作用:把 GitHub/GitLab 上的远程项目,完整下载到本地,同时自动配置远程仓库地址(后续可直接 push/pull

git clone https://github.com/username/repo.git

💡 说明:把命令中的 username 换成自己的 GitHub 用户名,repo 换成仓库名即可。


四、状态检查与历史查看

4.1 查看当前状态(最常用!)

🔧 作用:查看文件处于什么状态(未跟踪、已修改、已暂存),排查问题的首选命令

git status

✨ 简洁模式(只显示关键信息,不冗余):

git status --short

4.2 查看提交历史

🔧 作用:查看所有提交记录(谁提交的、时间、提交信息、哈希 ID)

git log

✨ 更常用写法(简洁显示 + 图形化分支关系,一目了然):

git log --oneline --graph --decorate --all

4.3 查看某次提交具体内容

🔧 作用:查看某一次提交,具体修改了哪些内容(需用到提交的哈希 ID,可通过 git log 获取)

git show <commit_id>

💡 示例:git show a1b2c3d(哈希 ID 可只写前几位,只要能唯一识别即可)


五、提交代码

概念提示:提交(commit)是“保存本地历史”,推送(push)是“同步到远程”。也就是说,commit 完成后,代码只在你的电脑上;只有 push 后,才会同步到 GitHub 等平台。

5.1 添加改动到暂存区

🔧 作用:告诉 Git,哪些改动要纳入下一次提交(相当于“选中”要保存的内容)

git add <file>

✨ 常用写法(添加当前目录下的所有改动,不用逐个文件添加):

git add .

5.2 提交改动(本地存档)

🔧 作用:把暂存区的改动,保存为一次历史快照(提交记录),必须写提交信息,说明本次改了什么

git commit -m "fix: 修复移动端菜单滚动后失效"

5.3 推送到远程(云端同步)

🔧 作用:把本地的提交记录,上传到远程仓库(如 GitHub),供团队成员查看或共享

📌 首次推送(需要建立本地分支和远程分支的跟踪关系):

git push -u origin main

📌 后续推送(已建立跟踪关系,直接推送即可):

git push

💡 说明: - origin:默认的远程仓库名(Git 自动命名,通常指向你克隆 / 添加的远程仓库地址) - main:要推送的分支名(如果是功能分支,就换成 feature/xxx) - -u:建立跟踪关系,后续推送该分支时,不用再写 origin main


六、分支管理(多人协作核心)

概念提示:分支不是“复制一份项目”,而是“指向提交链的轻量指针”,所以创建、切换分支的速度非常快,几乎不占用额外空间。

6.1 查看分支

git branch      # 查看本地所有分支(当前分支前会有 * 标记)
git branch -a   # 查看本地 + 远程所有分支

6.2 创建并切换分支(常用)

🔧 作用:一次性完成“创建分支 + 切换到该分支”,避免先创建再切换的麻烦

git switch -c feature/archive-fix

🔍 兼容写法(旧版本 Git 可用):

git checkout -b feature/archive-fix

💡 命名规范:功能分支建议用feature/功能名,修复分支用 fix/问题描述,便于区分。

6.3 切换分支

git switch main

🔍 兼容写法:git checkout main

6.4 删除分支

🔧 作用:删除不需要的分支(建议功能合并后再删除,避免误删)

git branch -d feature/archive-fix   # 只有该分支已合并到主分支,才能删除
git branch -D feature/archive-fix   # 强制删除,无论是否合并(谨慎使用)

⚠️ 补充: 1. 本地删除分支,不会影响远程分支(远程分支需要单独删除) 2. 删除远程分支命令:git push origin --delete <分支名>


七、拉取、抓取与同步

核心区别: - fetch = 只下载远程更新,不修改你当前的代码(安全,适合先观察差异) - pull = fetch + merge/rebase,会直接修改当前分支的代码(方便,但可能出现冲突)

7.1 拉取远程并合并(常用)

git pull

🔧 作用:相当于先执行 git fetch(下载远程更新),再执行 git merge(合并到当前分支),一步到位。

7.2 只抓取不合并(安全)

git fetch

🔧 作用:仅下载远程仓库的最新更新,更新本地的远程分支信息,但不修改你当前正在编辑的代码,适合先查看远程有哪些改动,再决定如何合并。

7.3 查看本地与远程差异

git diff origin/main...HEAD

💡 建议:团队协作中,遇到复杂改动时,优先执行git fetch + git diff,确认远程改动不会和自己的代码冲突后,再执行 git pull


八、查看差异(Diff,排查改动)

🔧 作用:查看不同区域之间的代码差异,确认改动内容,避免误提交。

8.1 工作区 vs 暂存区

git diff

📌 说明:查看“已修改但未暂存”的内容(即工作区比暂存区多的改动)。

8.2 暂存区 vs 最近提交

git diff --cached

📌 说明:查看“已暂存但未提交”的内容(即暂存区比本地仓库最近一次提交多的改动),提交前建议执行,确认提交内容无误。

8.3 两次提交之间

git diff <commit1> <commit2>

📌 说明:查看两次提交之间的所有改动,commit1commit2 是两次提交的哈希 ID(可通过 git log 获取)。


九、撤销与恢复(高频且谨慎!⚠️)

Git 的撤销功能很强大,但部分操作会永久删除改动,一定要谨慎使用,不确定时先执行 git statusgit log 确认。

9.1 撤销工作区改动(未暂存,安全)

🔧 作用:把“已修改但未暂存”的文件,恢复到和暂存区一致的状态(相当于放弃当前工作区的改动)

git restore <file>

📌 示例:git restore index.html,恢复 index.html 文件的工作区改动。

9.2 取消暂存(保留工作区,安全)

🔧 作用:把“已暂存”的文件,恢复到“未暂存”状态,但保留工作区的改动(相当于“取消选中”要提交的内容)

git restore --staged <file>

9.3 回退提交(保留改动,较安全)

🔧 作用:把本地仓库的提交回退到指定版本,但保留改动(改动会回到暂存区),可重新修改后提交

git reset --soft <commit_id>

9.4 回退提交并丢弃改动(危险!)

🔧 作用:把本地仓库回退到指定版本,并且永久丢弃该版本之后的所有改动(包括工作区和暂存区),无法恢复!

git reset --hard <commit_id>

警告:除非确认这些改动完全不需要,否则绝对不要用 git reset --hard

9.5 找回误操作历史(救命稻草)

🔧 作用:查看 Git 所有操作记录(包括已删除的提交、误 reset 的操作),可通过记录找回丢失的代码

git reflog

💡 用法:执行后会显示所有操作的历史记录,找到要恢复的操作对应的哈希 ID,执行 git reset --soft <commit_id> 即可恢复。


十、合并与冲突处理(团队协作常见场景)

重要提示:冲突不是错误,而是 Git 无法自动判断“同一位置的两份改动该保留哪一份”,手动处理即可。

10.1 合并分支

🔧 作用:把一个分支的改动,整合到另一个分支(比如功能开发完成后,把 feature 分支合并到 main 分支)

git switch main          # 先切换到要合并到的目标分支(如 main)
git merge feature/archive-fix  # 合并 feature/archive-fix 分支到 main

10.2 冲突处理流程(必学)

  1. 合并时出现冲突,Git 会提示“conflict in <file>”,此时文件会出现冲突标记

  2. 打开冲突文件,找到标记区域(格式如下),手动编辑: <<<<<<< HEAD # 当前分支(main)的内容 这是 main 分支的代码 ======= # 要合并的分支(feature)的内容 这是 feature 分支的代码 >>>>>>> feature/archive-fix # 要合并的分支名编辑原则:保留需要的内容,删除冲突标记(<<<<<<<、=======、>>>>>>>)

  3. 保存文件后,执行以下命令,完成合并: git add <conflict-file> # 把处理好的冲突文件加入暂存区 git commit # 提交合并结果(无需写 -m,Git 会自动生成合并信息)

10.3 放弃本次合并

🔧 作用:如果冲突处理不了,或者不想合并了,放弃本次合并,恢复到合并前的状态

git merge --abort

十一、远程仓库管理

11.1 查看远程仓库信息

🔧 作用:查看当前本地仓库关联的远程仓库地址(确认是否正确)

git remote -v

11.2 添加远程仓库

🔧 作用:把本地仓库和远程仓库(如 GitHub 新建的仓库)关联起来,后续可直接 push/pull

git remote add origin https://github.com/username/repo.git

11.3 修改远程仓库地址

🔧 作用:远程仓库地址变更(如仓库迁移、域名变更)时,修改本地关联的远程地址

git remote set-url origin https://github.com/username/new-repo.git

十二、提交信息规范(推荐,提升可读性)

📌 建议使用“约定式提交”,给提交信息加前缀,让日志更清晰,方便后续追溯和排查问题,团队协作时更规范。

常用前缀及含义:

  • feat: 新功能(如:feat: 新增用户登录功能)

  • fix: 修复问题(如:fix: 修复移动端登录按钮失效)

  • docs: 文档变更(如:docs: 完善 Git 笔记)

  • refactor: 重构(不改变功能,优化代码结构)

  • style: 格式调整(不改变逻辑,如缩进、空格)

  • test: 测试相关(新增 / 修改测试用例)

  • chore: 构建 / 配置 / 杂项(如:chore: 更新依赖)

✅ 示例:

fix: 修复手机端归档卡片横向溢出
docs: 新增 Git 使用指南文档
chore: 更新构建产物与依赖锁文件

十三、日常推荐工作流(团队协作版)

📌 按以下流程操作,可减少冲突,规范协作,适合大多数团队场景:

  1. 更新主分支(确保本地主分支是最新版本): git switch main git pull

  2. 创建功能分支(基于最新主分支,避免基于旧代码开发): git switch -c feature/mobile-menu-fix

  3. 开发并提交(多次小提交,不要一次性提交大量改动,便于回滚): git add . git commit -m "fix: stabilize mobile menu after scroll"

  4. 推送远程分支(同步到云端,方便团队查看): git push -u origin feature/mobile-menu-fix

  5. 发起 PR(Pull Request),等待代码评审,评审通过后合并到 main 分支


十四、常见问题与排查(避坑指南)

14.1 为什么 git push 被拒绝?

🔍 常见原因:

  • 远程仓库有新提交,你的本地分支落后于远程分支(最常见)

  • 权限不足(GitHub Token 权限不够,或未登录)

  • 推送的是受保护分支(如 main),有推送策略限制

✅ 处理思路(最常用):

git pull --rebase  # 拉取远程更新,并以变基方式合并(避免生成多余的合并提交)
git push

14.2 为什么有些文件不想提交?(如日志、依赖包)

✅ 解决方案:创建 .gitignore 文件,把不需要提交的文件 / 目录写进去,Git 会自动忽略这些文件。

📌 常用 .gitignore 示例:

node_modules/  # 依赖包目录
dist/          # 构建产物目录
*.log          # 所有日志文件
.env           # 环境变量文件(含密钥,绝对不能提交)
tmp_*.html     # 临时文件

14.3 已经被跟踪的文件,加入 .gitignore 也无效?

🔍 原因:Git 会持续跟踪已经添加过的文件,即使后续加入 .gitignore,也不会自动停止跟踪。

✅ 处理命令:

git rm -r --cached <path>  # 停止跟踪指定文件/目录,不删除本地文件
git add .                  # 更新暂存区
git commit -m "chore: stop tracking ignored files"  # 提交变更

📌 示例:git rm -r --cached node_modules,停止跟踪 node_modules 目录。

14.4 如何确认本次提交具体包含哪些内容?

✅ 两步确认(提交前必做,避免误提交):

git status          # 查看哪些文件被修改、被暂存
git diff --cached   # 查看暂存区的具体改动内容

十五、安全与最佳实践(避坑重点)

  • ❌ 绝对不要提交密钥、令牌、账号密码(如 .envcredentials.json),避免信息泄露

  • ❌ 谨慎使用 git reset --hardgit push --force(强制推送),前者会丢失改动,后者可能覆盖远程仓库的代码

  • ✅ 重要变更前,先创建分支,不要直接在 main 分支上开发

  • ✅ 提交前自检:执行 git statusgit diff --cached,确认改动无误;必要时运行测试 / 构建,避免提交错误代码

  • ✅ 一次提交聚焦一件事(如只修复一个 bug、只新增一个小功能),便于后续回滚和代码评审


十六、速查命令清单(高频常用,贴在桌面!)

git status                          # 查看当前状态(最常用)
git add .                          # 添加所有改动到暂存区
git commit -m "message"            # 提交改动
git push                           # 推送到远程
git pull                           # 拉取远程更新
git log --oneline --graph --decorate  # 查看简洁的提交历史(带分支图形)
git diff                           # 查看工作区与暂存区差异
git diff --cached                  # 查看暂存区与最近提交差异
git switch -c feature/xxx          # 创建并切换分支
git restore <file>                # 撤销工作区改动
git restore --staged <file>        # 取消暂存
git reflog                         # 查看所有操作历史(找回误删内容)

📝 学习总结:Git 核心是“三个区域 + 分支管理”,日常使用记住“提交→推送→拉取”的基本流程,遇到问题先查 git statusgit log,多练几次高频操作就能熟练掌握。后续遇到新的场景,再补充对应的知识点即可。

评论交流