跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash大前端

Mac 端 Git 基础概念与 PyCharm 使用指南

介绍在 Mac 环境下使用 Git 版本控制的基础概念与操作流程。涵盖工作区、缓存区、本地仓库及远程仓库的关系。详细讲解初始化、添加提交、查看日志、版本回退(revert/reset)及连接 GitHub 的方法。演示分支管理中的变基与合并操作,帮助开发者掌握 Git 核心命令与线性历史维护技巧。

暖阳发布于 2026/3/28更新于 2026/9/876 浏览

概要

本文介绍在 Mac 环境下使用 Git 版本控制的基础概念与操作流程,帮助开发者理解 Git 的核心机制。

整体架构流程

Git 包含四个核心概念:工作区、缓存区、本地仓库和远程仓库。本文以 PyCharm 为例,说明如何在 IDE 中搭建项目并与 GitHub 交互。

1. 工作区

工作区即项目本身的路径。每个项目在 PyCharm 中拥有独立的路径和文件夹,所有文件保存在该项目子目录下。

文章配图

创建项目后,在项目终端查看根路径。此时尚未初始化 Git 仓库,无法执行 Git 命令。确保已安装 Git(Mac 用户可使用 Homebrew 安装),在项目内执行 git init 初始化仓库。

文章配图

成功创建空 Git 仓库后,即可开始执行 Git 命令。

2. 缓存区

缓存区是 Git 特有的中间区域。在工作区创建或修改文件后,Git 能识别改动,但文件处于未追踪(untracked)状态。使用 git status 可查看当前仓库状态及文件变动。

文章配图

新建文件(如 f1.txt)后,Git 识别为未追踪。使用 git add <file_name> 将文件添加至缓存区,批量添加可使用 git add .。

文章配图

文件加入缓存区后等待提交。若对 f1.txt 进行编辑,再次运行 git status,Git 会提示工作区与缓存区内容不一致,显示更改(change)但未报备。

日常开发中,建议仅在最终版本确定时将其加入缓存区,无需频繁同步工作区与缓存区的每一个修改版本。

3. 提交至 Git 本地仓库

缓存区中的内容标记为'待提交'(staged)。满意后将文件提交至本地仓库,使用 git commit -m '提交说明'。

文章配图

提交后查看日志,显示变更统计(如 2 files changed, 21 insertions(+))。若后续删除内容,则显示 deletion (-)。

文章配图

继上次提交后再次修改 f1.txt 并删除一行,提交说明为 'edit second time for f1 delete 1 row',Git 更新提交记录。

针对提交记录的查看和其他命令

使用 git config --list 查看配置参数。常用且需手动修改的参数包括用户名和用户邮箱,邮箱需与远程仓库(如 GitHub)注册邮箱一致。

# 配置用户名和邮箱
git config --global user.email "<email>"
git config --global user.name "<name>"

# 清除配置
git config --global --unset-all user.email
git config --global --unset-all user.name

# 初始化默认分支设为 main
git config --global init.defaultBranch main

# 配置代理 IP
git config --global http.proxy "<ip>"
git config --global https.proxy "<ip>"

# 查看所有配置参数 (q 退出)
git config --list

# 查看日志提交记录 (q 退出)
git log

git log 可查看所有提交记录,包括 Hash ID、时间及备注,按时间倒序排列。

若误操作提交了错误版本,可使用以下命令调整:

# 撤回某次提交,新增反向回溯提交
git revert <hash id> --no-edit

# 强制返回某次提交状态,抹除该提交后的所有记录和版本数据
git reset --hard <hash id>

例如对 f2 文件进行了三次操作(创建、修改 1、修改 2),若想保留第二次修改而撤回第一次,可使用 revert。但因上下文依赖,Git 可能不允许直接跳过中间版本。此时只能使用 reset 强制回退。

git reset --hard 非常危险,会删除工作区数据。若仅希望退回仓库版本,可考虑:

# 假设最新版本 v5 -> 回退至 v3
# 默认 mixed reset 回退版本
git reset <hash id>
# 效果:
# 1. git 仓库 log 头指向指定提交 id v3
# 2. 缓存区清空,仅保留 v3 的版本
# 3. 但工作区的修改 v5 版本保留!
# 4. 运行 git status 显示"未暂存的修改",当前 v5 修改未和缓存区同步
# 5. 如果想重新保存 v5 需要再次 git commit -m '保存最新 v5' file v5

# soft reset 软回退版本
git reset --soft <hash id>
# 效果:
# 1. git 仓库 log 头指向指定提交 id v3
# 2. 暂存区 v5 版本保留(之前的 v5 版本变成已暂存状态)
# 3. 工作区也保留 v5
# 4. 运行 git status 显示"要提交的变更",当前 v5 修改已加入缓存区但未提交
# 5. 此时可以在工作区将 v5 修改至满意,然后 git commit -m 'new v5' file v5 替换缓存区里之前保留的 v5 并提交

本地仓库与远程 GitHub 仓库连接

本地存储相当于硬盘,GitHub 相当于云端。文件同步至云端后,可随时拉取。

文章配图

绑定远程仓库命令:

# 根据 url 绑定远程仓库
git remote add origin <Repo Url>

# 命名当前本地仓库主分支为 main 以便和 GitHub 平台同步
git branch -M main

# 推送&绑定 本地仓库 main 分支内容 与 远程仓库
git push -u origin main

文章配图

查看远程仓库命名(默认 'origin')和 URL。

文章配图

使用 git log 查看提交操作后,尝试将本地仓库内容提交至远程仓库。

文章配图

文章配图

提交成功,本地 repo 文件已同步至 GitHub。

主支 & 分支合并

场景:创建项目并初始化,创建 main 主支,add 并 commit 三次(a->b->c)。新创建分支 01,checkout 至 01,add 并 commit 两次(d->e)。想合并 01 到 main,形成线性历史 a->b->c->d->e。

原始状态:

# a---b---c main
# \ 
# d---e 01

文章配图

切换至分支 01 执行变基合并:

使用变基(Rebase)来实现线性历史
# 切换至 01 分支
git checkout 01

# 将 01 分支变基到 main 分支上
git rebase main
# 此操作把 d 和 e"移动"到 c 之后
# a---b---c---d'---e' 01 (main)
# 执行时发生了什么:
# 1. Git 找到 01 分支和 main 分支的共同祖先(c)
# 2. 临时保存 01 分支的更改(d 和 e)
# 3. 将 01 分支指针移到 main 的最新提交(c)
# 4. 重新应用保存的更改(d 和 e)

执行完毕后切换回 main 主支查看日志,发现没有合并记录。

文章配图

在 main 主支上使用快进合并:

# 切换到 main 分支
git checkout main

# 使用快进合并(因为现在 main 是 01 的祖先)
git merge 01

文章配图

合并完成后再次查看日志,01 分支的操作已并入 main。完成合并后同步新内容至 GitHub 仓库。

文章配图

同步成功。

目录

  1. 概要
  2. 整体架构流程
  3. 1. 工作区
  4. 2. 缓存区
  5. 3. 提交至 Git 本地仓库
  6. 针对提交记录的查看和其他命令
  7. 配置用户名和邮箱
  8. 清除配置
  9. 初始化默认分支设为 main
  10. 配置代理 IP
  11. 查看所有配置参数 (q 退出)
  12. 查看日志提交记录 (q 退出)
  13. 撤回某次提交,新增反向回溯提交
  14. 强制返回某次提交状态,抹除该提交后的所有记录和版本数据
  15. 假设最新版本 v5 -> 回退至 v3
  16. 默认 mixed reset 回退版本
  17. 效果:
  18. 1. git 仓库 log 头指向指定提交 id v3
  19. 2. 缓存区清空,仅保留 v3 的版本
  20. 3. 但工作区的修改 v5 版本保留!
  21. 4. 运行 git status 显示"未暂存的修改",当前 v5 修改未和缓存区同步
  22. 5. 如果想重新保存 v5 需要再次 git commit -m '保存最新 v5' file v5
  23. soft reset 软回退版本
  24. 效果:
  25. 1. git 仓库 log 头指向指定提交 id v3
  26. 2. 暂存区 v5 版本保留(之前的 v5 版本变成已暂存状态)
  27. 3. 工作区也保留 v5
  28. 4. 运行 git status 显示"要提交的变更",当前 v5 修改已加入缓存区但未提交
  29. 5. 此时可以在工作区将 v5 修改至满意,然后 git commit -m 'new v5' file v5 替换缓存区里之前保留的 v5 并提交
  30. 本地仓库与远程 GitHub 仓库连接
  31. 根据 url 绑定远程仓库
  32. 命名当前本地仓库主分支为 main 以便和 GitHub 平台同步
  33. 推送&绑定 本地仓库 main 分支内容 与 远程仓库
  34. 主支 & 分支合并
  35. a---b---c main
  36. \
  37. d---e 01
  38. 使用变基(Rebase)来实现线性历史
  39. 切换至 01 分支
  40. 将 01 分支变基到 main 分支上
  41. 此操作把 d 和 e"移动"到 c 之后
  42. a---b---c---d'---e' 01 (main)
  43. 执行时发生了什么:
  44. 1. Git 找到 01 分支和 main 分支的共同祖先(c)
  45. 2. 临时保存 01 分支的更改(d 和 e)
  46. 3. 将 01 分支指针移到 main 的最新提交(c)
  47. 4. 重新应用保存的更改(d 和 e)
  48. 切换到 main 分支
  49. 使用快进合并(因为现在 main 是 01 的祖先)

更多推荐文章

查看全部
  • OpenClaw 环境搭建指南——Windows/macOS/Linux 三平台部署
  • HarmonyOS6 RcImage 组件填充模式与形状系统设计(一)
  • 腾讯混元图像 3.0 图生图模型开源,LMArena 评测跻身全球第一梯队
  • AI 大模型助力专利翻译:功能与应用解析
  • AIGC Bar API 站接入与使用指南
  • 昇腾 CANN 生态架构与核心语言学习指南
  • Flutter 三方库 nanoid 详解:替代 UUID 的紧凑型唯一标识方案
  • 算法实战:位运算求解两数之和、唯一数字及缺失数字
  • C++ unordered_map/set 底层原理与位图布隆过滤器实现
  • TanStack Table 核心特性与选型分析
  • 在 Cursor 中配置 MCP 服务实现自动化开发
  • Linux 进程等待:wait/waitpid 与僵尸进程治理
  • Spring AI Tool 实现自然语言操作 MySQL 数据库详解
  • Flutter 三方库 webkit_inspection_protocol 的 OpenHarmony 适配指南
  • MySQL 常用命令速查表:从基础查询到运维优化
  • AI 产品经理工作指南:职责、挑战与技能体系
  • 前端实现记住密码功能的原理与方案
  • AirSim 无人机仿真入门:实现起飞与降落
  • OpenClaw 进阶教程:记忆系统、定时任务、多模型切换与子代理配置
  • WebMCP:开启 Agentic Web 新时代——Chrome 新 API 的特性与前瞻

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online