一、Git 是什么

想象一下你正在写毕业论文:

  • 论文_初稿.docx

  • 论文_修改1.docx

  • 论文_修改2_最终版.docx

  • 论文_修改2_最终版_真的最终.docx

  • 论文_打死也不改了.docx

是不是很熟悉?这就是没有版本控制的痛点。

Git 就是来解决这个问题的。它是一个版本控制系统,能帮你记录每次修改的历史,随时回到任何一个旧版本,多人协作时,不冲突并行开发多个功能(分支)

要注意,git和github不是一个东西。Git 是你电脑上的版本控制软件,GitHub 是存放 Git 仓库的云端平台。


二、安装 Git

Windows

  1. 访问 git-scm.com

  2. 下载 .exe 文件并运行

  3. 一路“下一步”即可

安装完成后,在开始菜单找到 Git Bash,打开它。

Linux (Ubuntu/Debian)

bash

sudo apt update
sudo apt install git

安装完成后,验证是否成功:

bash

git --version
# 输出类似:git version 2.34.1

三、第一次配置

告诉 Git 你是谁(这一步很重要,因为每次提交都会记录这些信息):

bash

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

查看配置是否成功:

bash

git config --list

四、核心概念

概念

大白话解释

工作区

你正在编辑的文件夹,看得见摸得着

暂存区

一个临时的“购物车”,准备要提交的文件放在这里

仓库

真正保存所有历史版本的地方

工作流程:

在工作区修改文件 → 添加到暂存区 → 提交到仓库


五、创建仓库

5.1 初始化一个新仓库

bash

# 创建一个项目文件夹
mkdir my-project
cd my-project

# 初始化 Git 仓库
git init

执行后,当前文件夹会多出一个 .git 隐藏文件夹(里面就是 Git 的“数据库”,别碰它)。

5.2 创建第一个文件

bash

echo "# 我的第一个项目" > README.md

5.3 查看状态(最常用的命令)

bash

git status

你会看到类似:

text

On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        README.md

意思:README.md 是一个新文件,Git 还没开始追踪它。

5.4 添加到暂存区

bash

git add README.md

也可以一次性添加所有变化:

bash

git add .

再次运行 git status,你会看到文件变成绿色,表示已经在暂存区了。

5.5 提交到仓库

bash

git commit -m "初始化项目:添加 README"

-m 后面的字符串是提交说明,一定要写清楚这次改了什么(这是好习惯)。

成功后会显示:

text

[main (root-commit) a1b2c3d] 初始化项目:添加 README
 1 file changed, 1 insertion(+)

搞定!你已经完成了第一次提交。


六、核心操作流程图解

text

修改文件 → git add → 暂存区 → git commit → 仓库
   ↑                                    ↓
   └────── git checkout <文件> ←────────┘

七、查看历史与回退

查看提交历史

bash

git log

输出示例:

text

commit a1b2c3d4e5f6... (HEAD -> main)
Author: 张三 <zhangsan@example.com>
Date:   Sun Jan 15 15:30:00 2024 +0800

    初始化项目:添加 README

想看得更简洁:

bash

git log --oneline
# 输出:a1b2c3d 初始化项目:添加 README

回退到某个版本

假设你又提交了两次,现在想回到第一次提交的状态:

bash

# 先查看历史,找到想要回去的 commit id(前几位即可)
git log --oneline

# 假设输出:
# c3d4e5f 第三次提交
# b2c3d4e 第二次提交  
# a1b2c3d 初始化项目:添加 README

# 回退到第二次提交(但保留之后的修改记录)
git reset --soft b2c3d4e

# 或者彻底回退(丢弃所有后续修改)—— 谨慎使用
git reset --hard b2c3d4e

⚠️ --hard 会丢失所有未提交的修改,新手慎用。


八、分支

分支就像是平行宇宙。你可以在一个分支上开发新功能,另一个分支上修 bug,互不干扰。

8.1 查看分支

bash

git branch
# * 表示当前所在分支

8.2 创建新分支

bash

git branch 新功能

8.3 切换分支

bash

git checkout 新功能
# 或者用新版命令(推荐)
git switch 新功能

8.4 创建并切换一步到位

bash

git checkout -b 另一个新功能
# 或
git switch -c 另一个新功能

8.5 合并分支

假设你在 新功能 分支上完成了开发,想合并回 main 分支:

bash

# 先切换回 main
git checkout main

# 把 新功能 分支合并进来
git merge 新功能

8.6 删除分支

bash

git branch -d 新功能   # 已合并的分支
git branch -D 新功能   # 强制删除(未合并的)

九、与远程仓库协作(GitHub/Gitee)

本地仓库只能在你自己的电脑上,远程仓库(如 GitHub、GitLab、Gitee)能让别人也看到你的代码。

9.1 在 GitHub 上创建一个空仓库

  1. 登录 GitHub,点击右上角 “+” → “New repository”

  2. 输入仓库名,不要勾选 “Add a README file”

  3. 点击 “Create repository”

9.2 连接本地与远程

复制远程仓库的地址(HTTPS 或 SSH):

bash

# 添加远程仓库(origin 是默认名字)
git remote add origin https://github.com/你的用户名/仓库名.git

9.3 推送代码到远程

bash

git push -u origin main

-u 是第一次使用时设置上游分支,以后可以直接用 git push

9.4 克隆别人的仓库

bash

git clone https://github.com/某用户/某仓库.git

9.5 拉取远程更新

bash

git pull
# 等价于:git fetch + git merge

十、最常用命令速查表

命令

说明

git init

初始化新仓库

git clone <url>

克隆远程仓库

git status

查看当前状态(每天用无数次)

git add <文件>

添加到暂存区

git add .

添加所有变化

git commit -m "说明"

提交到仓库

git log --oneline

查看简洁历史

git branch

查看分支

git checkout -b <分支名>

创建并切换分支

git merge <分支名>

合并分支

git pull

拉取远程更新

git push

推送到远程

git diff

查看未暂存的修改

git diff --staged

查看暂存区的修改


十一、常见QA

Q1: 提交时写错了说明怎么办?

bash

git commit --amend -m "正确的说明"

Q2: 刚刚 git add 错了文件,想撤销?

bash

git reset HEAD <文件名>
# 或用新版命令
git restore --staged <文件名>

Q3: 修改了文件但还没 add,想放弃修改?

bash

git checkout -- <文件名>
# 或用新版命令
git restore <文件名>

Q4: 合并时出现冲突怎么办?

冲突时 Git 会在文件里标注:

text

<<<<<<< HEAD
你的修改
=======
别人的修改
>>>>>>> branch-name

手动编辑文件,删除标记行,保留想要的内容,然后:

bash

git add <冲突文件>
git commit -m "解决冲突"

Q5: 想撤销上一次 commit 但不丢掉修改?

bash

git reset --soft HEAD~1

十二、实践习惯

  1. 小而频繁地提交,不要攒一堆修改一次性提交

  2. 提交说明要清晰修复登录页面验证码问题修改 好一万倍

  3. 不要提交:密码、密钥、大的二进制文件、编译产物

  4. 使用 .gitignore 文件忽略不需要追踪的文件:

gitignore

# .gitignore 示例
node_modules/
.env
*.log
.DS_Store
dist/
  1. push 前先 pull,避免远程冲突

  2. 使用分支开发新功能,main 分支保持稳定


结语

刚开始可能会觉得命令很多,但你只需要记住:

git statusgit addgit commitgit push

这四步能覆盖 80% 的日常使用。其余不懂的,随时 git --help 或者上网搜

首发于 焰白小站 enento.com

本文采用 CC BY-NC 4.0 许可协议,转载请注明出处