一文入门 Git:从本地版本控制到多人协作(学习笔记整理)

218 阅读6分钟

Git 是目前最主流的分布式版本控制系统,几乎是程序员的必备技能。本文从 Git 基础概念、本地操作、版本回退、分支管理到远程仓库和多人协作,系统梳理 Git 的核心用法,适合 Git 初学者快速入门。

一、Git 基础配置

首次使用 Git,需要配置用户名和邮箱(用于标识提交者):

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

查看当前 Git 配置:

git config --list

--global 表示全局配置,对当前用户下的所有 Git 仓库生效。

二、Git 的三个核心区域

Git 中最重要的概念之一是 三个区域

  1. 工作区(Working Directory)
  2. 暂存区(Stage / Index)
  3. 版本库(Repository)

常用命令

git add 文件名        # 将文件加入暂存区
git commit -m "提交说明"  # 将暂存区内容提交到版本库

示例:

git add page/login/index.html

查看暂存区中的文件:

git ls-files

三、文件状态与 git status

查看文件状态(简洁模式):

git status -s

输出示例中每一列的含义:

  • 第一列:暂存区状态
  • 第二列:工作区状态

常见状态标识:

状态含义
U未跟踪(Untracked)
A新添加(Added)
M已修改(Modified)
未修改

四、Git 暂存区的常见操作

1️⃣ 用暂存区覆盖工作区

git restore 文件名

危险操作:会丢弃工作区的修改,完全确认后再使用。

2️⃣ 从暂存区移除文件(不删除工作区文件)

git rm --cached 文件名

执行后,文件会变成 未跟踪(U)状态

五、查看提交历史

查看简洁提交记录

git log --oneline

查看完整操作历史(包括回退、reset)

git reflog

reflog 非常重要,误删提交后也能靠它找回来

六、Git 版本回退(reset)

Git 提供了三种常见的回退方式:

1️⃣ soft(只回退 commit)

git reset --soft 版本号
  • 保留暂存区
  • 保留工作区

2️⃣ mixed(默认)

git reset --mixed 版本号
  • 暂存区被清空
  • 工作区内容保留

3️⃣ hard(危险)

git reset --hard 版本号
  • 暂存区 + 工作区 全部覆盖
  • 本地修改彻底丢失

回退后可以继续修改并提交,会生成 新的提交记录

七、Git 忽略文件(.gitignore)

通过 .gitignore 文件,可以指定 Git 不需要追踪的文件,例如:

  • 编译产物
  • 日志文件
  • 本地配置文件

常见示例:

node_modules/
*.log
.idea/

八、Git 分支管理

分支基础概念

  • master / main:主分支
  • HEAD:当前指针,指向当前分支

常用命令

创建分支:

git branch 分支名

切换分支:

git checkout 分支名

查看分支:

git branch

九、分支合并与删除

合并分支

git merge 分支名

示例流程:

git checkout master
git merge content
git branch -d content

当两个分支在同一基础上各自产生了新的提交,Git 会生成一次 新的 merge 提交记录

十、合并冲突解决

当多个分支修改了同一文件的同一位置,就会产生冲突。

解决步骤:

  1. 使用 VS Code 或编辑器打开冲突文件
  2. 手动选择保留的代码
  3. 再次提交一次:
git add .
git commit -m "解决合并冲突"

十一、远程仓库(GitHub / Gitee)

添加远程仓库

git remote add origin 远程仓库地址

推送代码到远程仓库

git push -u origin master

等价写法:

git push --set-upstream origin master:master

删除远程仓库配置:

git remote remove origin

十二、克隆远程仓库

git clone 仓库地址

clone 会自动:

  • 下载代码
  • 初始化 Git 仓库
  • 关联远程仓库

十三、多人协同开发流程

情况一:本地没有仓库

git clone 仓库地址

情况二:本地已有仓库

git pull origin master

使用 rebase 的方式拉取代码

git pull --rebase origin master

rebase 会把你的提交“接”到远程最新提交后面,让提交历史更线性。


十四、撤销某次提交(推荐)

git revert commit_id
git push

revert 不会破坏历史记录,是多人协作中最安全的撤销方式

十五、⚠️ 注意事项:rebase 的问题 & 为什么企业更常用 git stash

在学习 Git 的过程中,很多教程都会推荐使用 git pull --rebase,但在真实的企业开发环境中,需要谨慎使用

1️⃣ rebase 的优点(为什么有人用)

git pull --rebase origin master

rebase 的核心作用是:

  • 本地提交“挪到”远程最新提交之后
  • 让提交记录 更加线性、像一条直线
  • 看起来“很干净”

示意效果:

A -- B -- C -- D

而不是:

A -- B ----- E
      \     /
        C -- D

2️⃣ rebase 的问题(重点)

⚠️ rebase 最大的问题:它会“重写历史”

具体表现为:

  • 原来的提交 commit id 会发生变化
  • 一些提交记录在 git log再也找不到
  • 只能在 git reflog 中勉强找回
  • 多人协作时,极易造成混乱甚至代码丢失

常见风险场景

  • 你 rebase 了已经推送到远程的提交

  • 同事基于你的旧提交继续开发

  • commit 历史被改写,导致:

    • 冲突异常复杂
    • 需要强制推送(git push -f
    • 这是企业中明令禁止的操作

3️⃣ 企业开发中:一般不推荐 rebase

在实际工作中,大多数团队的原则是:

  • 不改公共分支的提交历史
  • 保证提交记录可追溯、可审计
  • 出问题能快速定位责任提交

因此更常见的做法是:

  • git pull(merge 方式)
  • 或者使用 git stash 临时保存修改

4️⃣ git stash 是什么?

git stash 用来 临时保存当前工作区和暂存区的修改,让你可以:

  • 快速切换分支
  • 拉取最新代码
  • 处理紧急 Bug
  • 不影响当前未完成的代码

使用场景举例

正在写功能 A
👉 突然通知你修一个线上 Bug
👉 代码还没写完,不想 commit

这时就非常适合用 stash

5️⃣ git stash 的常用命令

保存当前修改

git stash

或者带说明:

git stash save "正在开发登录功能"

查看 stash 列表

git stash list

恢复最近一次 stash(不删除)

git stash apply

恢复并删除 stash

git stash pop

恢复指定 stash

git stash apply stash@{0}

6️⃣ 为什么企业更偏向用 stash?

git stash 的优点:

不改写任何提交历史
✅ 不影响远程分支
✅ 不需要 commit 半成品代码
✅ 非常适合临时切任务、修 Bug
✅ 安全、可控、符合团队规范

👉 在企业中更常见的工作流是:

写代码 → stash → 切分支 → pull / 修 Bug → 回来 pop → 继续写

而不是:

写代码 → rebase → 强推 → 祈祷同事没骂你

在公司里:
能不用 rebase 就不用
能用 stash 解决的,千万别强推