文章标题:
Git从入门到远程协作:实战全指南
文章内容:目录
序言:认识Git
1. 启程 – 安装与初步体验
1.1 开启Git之行 – 下载与安装
1.1.1 官方获取:
前往Git的官方下载地址Git – Downloads(以Windows系统为例)进行下载。

1.1.2 安装步骤:
下载完成后双击可执行文件,以Git-2.40.1-64-bit版本为例,按照安装向导操作,可根据自身需求选择或默认点击“next”完成安装。


1.1.3 安装验证:
安装完毕后,打开Git Bash,执行以下命令验证,显示版本号则安装成功。
$ git --version
# 执行结果
git version 2.40.1.windows.1
1.2 初次接触 – 基础配置与仓库创建
1.2.1 身份设定:配置全局用户信息
# 配置user.name和user.email,建议此处的user.email使用真实邮箱
$ git config --global user.name "你的用户名"
$ git config --global user.email "你的邮箱地址"
# 查看配置是否生效
$ cat .gitconfig
1.2.2 编辑器选择(可选):配置默认文本编辑器(例如VS Code,若不配置通常默认是vim)
# 配置VS Code
$ git config --global core.editor "code --wait"
# 查看全局配置的文本编辑器
$ git config --global core.editor
# 执行结果
code --wait
1.2.3 初始化!创建首个Git仓库
# 仓库初始化
$ git init
# 执行结果
Initialized empty Git repository in C:/Users/17461/learn/.git/
# 查看隐藏的.git文件夹 - Git的“核心”
$ cat .git/config
# 执行结果说明
[core]
repositoryformatversion = 0 # 仓库格式版本(固定为0)
filemode = false # 记录文件权限变化(Linux/macOS常用,Windows通常为false)
bare = false # 是否为裸仓库(false表示常规仓库,有工作区)
logallrefupdates = true # 记录所有引用(分支、标签)的更新日志
ignorecase = true # 是否忽略文件名大小写(Windows/macOS常见)
editor = code --wait # 当前仓库单独配置的默认文本编辑器(覆盖全局)
1.2.4 初步查看状态:
- 未跟踪状态:一般位于Untracked files:标题下方,并且以红色文字显示,还没有被Git仓库进行管理
- 已暂存状态:通常处于
Changes to be committed:标题下方,并且以绿色文字显示,已经通过git add命令添加到了暂存区
# 1. 新建一个测试文件
$ vi test.txt
# 保存后查看状态
$ git status
# 将文件添加至暂存区
$ git add test.txt
2. 核心机制 – 提交、历史与工作流程
2.1 理解Git的“魔力” – 工作区、暂存区与仓库
2.1.1 工作区 (Working Directory)
-
你的编辑空间:能够直接看到的项目文件所在区域
-
状态:
✅ 未跟踪文件(新创建的文件)
✅ 已修改但未暂存(发生改动的文件)
⚠️ 所有的变动还没有被Git记录下来
2.1.2 暂存区 (Staging Area)
-
提交的预准备区域:
git add之后文件存放的地方 -
核心作用:
✨ 精准筛选要提交的内容(文件/代码块)
✨ 构建原子化提交(避免混杂不同的修改) -
⚡️ 临时存储 → 不进行
commit就不会永久保存
2.1.3 版本库 (Repository)
-
历史存储库:
.git目录下的数据库 -
核心能力:
🔒 永久存储提交(git commit的快照)
🔄 记录分支/标签等完整的历史 -
⚡️ 数据无法被篡改 → 是只增不减的提交链
2.1.4 Git三大核心区域的简洁概括
2.2 记录你的历程 – 添加(git add)与提交(git commit)
2.2.1 添加(git add)
**git add**是把工作区的变更(新增、修改、删除)添加到暂存区的关键命令,是提交之前的“准备步骤”,确保需要记录的变更被Git跟踪。
# 仅仅将指定文件的当前变更(修改 / 新增 / 删除)加入暂存区,其他文件不受影响。
git add <filename>
# 添加当前目录(包含子目录)下的所有新增文件以及已跟踪文件的修改/删除,但不包括被删除的未跟踪文件。
git add .
# 添加所有变更,包括新增文件、已跟踪文件的修改 / 删除、被删除的未跟踪文件,覆盖范围比 git add . 更全面。
git add -A(或 git add --all)
2.2.2 提交(git commit)
**git commit**把暂存区的变更提交到本地仓库,生成一个不可修改的历史节点,是Git记录项目历史的核心操作。
# 将暂存区的所有变更打包成一个 “提交记录”,存入本地仓库,同时生成唯一标识(SHA-1 哈希值)。
git commit -m "清晰、有意义的提交说明"
2.2.3 总结:
git add负责“挑选要提交的内容”,git commit负责“将挑选的内容存档为历史节点”,两者配合完成本地代码的版本记录,是Git工作流程的基础。
2.3 时光回溯 – 查看历史与差异(git diff)
2.3.1 浏览历史日志:git log – 查看提交记录 (常用选项:--oneline, --graph, --pretty)
# 简洁模式,每条提交仅显示哈希值前 7 位和提交说明,适合快速浏览历史。
git log --oneline
# 以图形化方式展示分支合并历史,直观呈现分支关系(如 * 表示提交,| 表示分支线)。
git log --graph
# 自定义输出格式,常用 --pretty=fuller 显示完整提交信息(包括作者、提交者、时间戳),或 --pretty=format:"%h %an %s" 按需提取信息(%h 短哈希、%an 作者名、%s 提交说明)。
git log --pretty=<格式>
# 以图形化线条展示所有分支的提交历史和合并关系
git log --graph --oneline --all
2.3.2 火眼金睛:git diff – 比较工作区、暂存区、不同提交之间的差异
# 比较工作区与暂存区
git diff(查看未暂存的修改)。
# 比较暂存区与本地仓库
git diff --staged(查看已暂存、待提交的修改)。
# 比较两个提交
git diff <提交1> <提交2>(如 git diff a3f8d2e b7c9d01,查看两次提交的差异)。
# 比较两个分支
git diff 分支1 分支2(如 git diff main dev,查看两分支最新提交的差异)。
2.3.3 查看快照内容:git show– 查看特定提交的详细信息
# 查看最新提交
git show(默认显示 HEAD 指向的最新提交)。
# 查看指定提交
git show <提交哈希>(如 git show a3f8d2e,显示该提交的详细变更)。
# 查看标签对应的提交
git show <标签名>(如 git show v1.0,查看标签指向的提交详情)。
3. 协作基础 – 分支与合并
3.1 开启平行世界 – 分支(Branching)
3.1.1 创建分支
# 创建分支:
git branch <分支名>(如 git branch feature/login)
# 切换分支:
git checkout <分支名>(如 git checkout dev)
# 新版切换分支:
git switch <分支名>(更直观,如 git switch main)
# 创建并切换:
git switch -c <新分支名>(一步完成创建 + 切换)
3.1.2 查看分支
# 显示本地所有分支,当前分支前标 *
git branch
# 显示本地 + 远程所有分支(远程分支以 remotes/ 开头)
git branch -a
3.2 合而为一 – 合并(Merging)
# 将指定分支的代码整合到当前分支
git merge <待合并分支>
4. 连接世界 – 远程仓库与协作
4.1 搭建桥梁 – 配置远程仓库(Remote)
4.1.1 什么是远程仓库?
远程仓库是托管在网络服务器上的Git仓库(比如GitHub、GitLab、Gitee等平台),主要作用有:
- 作为代码共享与协作的中心,方便多人同步代码;
- 提供代码备份,防止本地代码丢失;
- 支持团队成员基于远程仓库进行协同开发(像提交、拉取、评审代码等)。
4.1.2 配置远程仓库ssh公钥(无需每次输入账号密码)
# 生成密钥对
ssh-keygen -t ed25519 -C "建议与远程平台账号关联的邮箱"
# 查看并复制公钥内容
cat ~/.ssh/id_ed25519.pub
4.1.3 关联远程仓库
# 将本地仓库与远程仓库关联
git remote add <远程名称> <仓库地址>
# 建立本地仓库与远程仓库的映射,后续可通过 origin 指代该远程仓库。
git remote add origin https://gitee.com/yourname/yourrepo.git
4.1.4 查看远程仓库
# 列出当前仓库关联的所有远程仓库,包括名称和对应的 fetch(拉取)、push(推送)地址。
git remote -v(-v 表示显示详细地址)
4.2 推送与拉取 – 同步你的工作
4.2.1 克隆(Clone):
# 获取完整项目 (git clone) - 初始化远程关联的快捷方式
git clone https://gitee.com/yourname/yourrepo.git
4.2.2 获取他人成果:git pull = git fetch + git merge
- 详解
git fetch(获取远程更新但不自动合并)
# 获取远程仓库origin的所有更新
git fetch origin
# 仅获取远程main分支的更新
git fetch origin main
- 详解
git pull(获取并自动尝试合并到当前分支)
# 对比本地当前分支与远程main的差异
git diff origin/main
# 手动将远程更新合并到当前分支
git merge origin/main
4.2.3 上传你的成果
# 第一次推送加 -u 建立追踪
git push -u origin
# 后续推送简化
git push
# 推送到仓库的哪个分支(dev master)
git push github(仓库别名) main(分支)
5. 优化与排雷
5.1 后悔药? – 撤销与重置 (需谨慎使用!)
5.1.1 撤销工作区修改:git checkout -- <文件>
- 作用:丢弃工作区中指定文件的未暂存修改,恢复到最近一次提交或暂存的状态。
- 示例:
# 撤销对 test.txt 的本地修改。
git checkout -- test.txt
- 注意:此操作直接覆盖本地修改且无法恢复,使用前确保不需要保留当前修改。
5.1.2 撤销暂存区修改:git reset HEAD <文件> 或 git restore --staged <文件>
- 作用:将已用
git add暂存的文件从暂存区撤回(回到 “未暂存” 状态),不影响工作区内容。 - 示例:
# 传统:
git reset HEAD test.txt
# 新版:
git restore --staged test.txt
- 适用场景:误将文件加入暂存区,需重新选择暂存内容。
5.1.3 修改最新提交:git commit --amend
- 作用:修改最近一次提交的注释,或补充漏掉的文件(需先
git add未提交的文件)。 - 操作:
# 仅改注释:执行命令后编辑新注释,保存即可。补充文件:
git add 漏掉的文件
git commit --amend。
- 注意:会覆盖最新提交的哈希值,若该提交已推送到远程,需强制推送(
git push -f),谨慎使用。
5.1.4 回退提交:git reset 与 git revert
git reset <版本>(修改历史,有风险)
- 作用:将当前分支回退到指定版本,根据参数控制回退范围:
--soft:仅回退提交记录,暂存区和工作区不变(可重新提交)。--mixed(默认):回退提交记录和暂存区,工作区不变(需重新git add)。--hard:彻底回退提交记录、暂存区和工作区(工作区修改全部丢失,无法恢复)。
- 风险:修改历史记录,若回退的提交已推送到远程,需强制推送,可能影响协作。
git revert <版本>(安全回退)
- 作用:创建一个新提交,抵消指定旧提交的修改,不改变原有历史记录。
- 优势:安全保留完整历史,适合已推送至远程的提交回退,不影响协作。
- 示例:
# 生成新提交撤销 a1b2c3d 的修改。
git revert a1b2c3d
附录:常用Git命令速查表
一、环境配置
| 命令 | 功能 | 示例 |
|---|---|---|
git --version |
验证安装 | git --version |
git config --global user.name "名字" |
设置全局用户名 | `git config –global |
| user.name “John”` | ||
git config --global user.email "邮箱" |
设置全局邮箱 | `git config –global |
| user.email “john@example.com”` | ||
git config --global core.editor "编辑器" |
设置默认文本编辑器 | `git config –global |
| core.editor “code –wait”` |
二、本地仓库操作
| 命令 | 功能 | 示例 |
|---|---|---|
git init |
**初始化新仓库 |
