Git:从零上手,先用起来

这篇文章只有一个目标:让你能用 Git 完成日常工作。不讲底层原理,不讲分支哲学,只讲命令和场景。原理部分在 02-内容寻址数据库与四种对象03-三棵树、引用系统与本地时间机器,等你用顺手了再去看。

一、安装与初始配置

安装

# macOS(推荐 Homebrew)
brew install git
 
# Debian / Ubuntu
sudo apt install git
 
# Windows:下载 Git for Windows
# https://git-scm.com/download/win

安装完成后必做的三件事

git config --global user.name "你的名字"
git config --global user.email "[email protected]"
git config --global init.defaultBranch main

这三行告诉 Git 你是谁、默认分支叫什么。user.nameuser.email 会出现在每一条提交记录里,改错了也没关系,可以随时重新设置。

两个实用的额外配置

git config --global core.editor "code --wait"   # 用 VS Code 作为提交信息编辑器
git config --global pull.rebase false            # pull 时用 merge,行为直观

pull.rebase false 是给初学者的建议:先让行为可预期,等理解了 rebase 再做选择。

查看当前所有全局配置:

git config --global --list

二、创建仓库

本地新建

git init my-project    # 新建目录并初始化
# 或
cd existing-folder
git init               # 在现有目录初始化

执行后会出现一个 .git/ 隐藏目录,Git 的所有数据都在里面。

克隆已有仓库

git clone https://github.com/user/repo.git          # 克隆到 repo/ 目录
git clone https://github.com/user/repo.git my-dir   # 克隆到指定目录
git clone [email protected]:user/repo.git              # SSH 方式(推荐,需配置 SSH 密钥)

克隆完成后,远程地址已自动配置为 origin,可以直接 push 和 pull。

三、日常提交循环

这是 Git 最核心的操作序列,每天都会用到。

第一步:看清楚状态

git status

这条命令是一切的起点。它会告诉你:哪些文件被修改了、哪些已经暂存、哪些是新文件还没被追踪。养成在 add 之前先 status 的习惯。

第二步:暂存修改

git add README.md             # 暂存指定文件
git add src/                  # 暂存整个目录
git add .                     # 暂存所有改动(当前目录及子目录)
git add -p                    # 交互式暂存:逐块选择要提交的内容

git add -p 是个很实用的命令:当一个文件里同时有两个不同的改动,但你只想提交其中一个时,它可以让你逐块选择。

第三步:提交

git commit -m "fix: 修复登录页面的样式问题"
git commit                    # 打开编辑器写多行提交信息
git commit --amend            # 修改最近一次提交(消息写错了、或者漏加了文件)

关于提交信息的格式,推荐 类型: 描述 的写法,比如 feat: 新功能、fix: 修复问题、docs: 文档更新。这不是强制的,但养成一致的习惯,日后看历史记录会方便很多。

查看改动了什么

git diff                      # 工作区 vs 暂存区(还没 add 的改动)
git diff --staged             # 暂存区 vs 上次提交(已 add 的改动)
git diff main..feature        # 两个分支之间的差异

查看提交历史

git log                       # 完整历史
git log --oneline             # 每条提交一行,简洁
git log --oneline --graph     # 带分支图的历史,多分支时很有用
git log --oneline -10         # 只看最近 10 条
git log --oneline src/        # 只看某个目录的历史

四、远程操作

查看和管理远程地址

git remote -v                          # 查看所有远程地址
git remote add origin [email protected]:user/repo.git   # 添加远程
git remote set-url origin <new-url>    # 修改远程地址

推送

git push                      # 推送当前分支(已设置 upstream 的情况下)
git push -u origin main       # 首次推送,同时设置 upstream(以后直接 git push 即可)
git push origin feature       # 推送指定分支

拉取

git pull                      # 拉取并合并(等价于 fetch + merge)
git fetch                     # 只拉取远程更新,不自动合并
git fetch origin              # 同上,明确指定远程名

fetchpull 的区别:fetch 只是把远程的数据同步到本地,你的工作分支不会发生任何变化;pull 会直接合并进来。不确定远程有什么改动时,先 fetch,看看 git log origin/main 之后再决定要不要合并。

五、分支基础

查看和创建分支

git branch                    # 查看所有本地分支
git branch -a                 # 查看所有分支(含远程)
git branch feature            # 新建分支(不切换过去)
git switch feature            # 切换到分支
git switch -c feature         # 新建并切换(最常用的组合)
git branch -d feature         # 删除已合并的分支
git branch -D feature         # 强制删除(未合并也删)

git switch 是 Git 2.23 引入的新命令,比 git checkout 语义更清晰,推荐使用。

合并分支

git switch main               # 先切换到目标分支
git merge feature             # 把 feature 合并进来

合并时如果发生冲突,Git 会在文件里标记出冲突区域:

<<<<<<< HEAD
你在 main 上的内容
=======
你在 feature 上的内容
>>>>>>> feature

编辑文件、保留想要的内容,然后:

git add 冲突的文件
git commit                    # Git 会自动填写合并提交信息

六、后悔了怎么办

这是最常被问到的问题,按场景对号入座。

还没有 git add,想丢弃工作区的改动

git restore README.md         # 丢弃指定文件的改动
git restore .                 # 丢弃所有未暂存的改动(不可恢复,谨慎)

已经 git add,想取消暂存

git restore --staged README.md   # 取消暂存,但保留工作区的改动
git restore --staged .           # 取消所有暂存

已经 git commit,想修改最近一次提交

git commit --amend -m "新的提交信息"    # 只改提交信息
git add 漏掉的文件 && git commit --amend --no-edit   # 追加文件进上一次提交

注意:--amend 只适合还没有 push 出去的提交。已经推送到远程的提交不要随意修改。

已经 git commit,想安全地撤销

git revert HEAD               # 创建一个新提交来撤销上一次提交(安全,历史不变)
git revert <commit-sha>       # 撤销某一个特定提交

git revert 是撤销操作的推荐方式,因为它不改写历史,只是”再提交一次,内容是把上一次改动反过来”。你在团队仓库里看到的历史记录永远不会凭空消失。

git reset 是更强力的工具,它可以移动分支指针、改写历史。初学阶段先用 revert 就够了,reset 的细节在 03-三棵树、引用系统与本地时间机器 里详细讲。

附:常用命令速查

场景命令
看状态git status
暂存git add . / git add -p
提交git commit -m "..."
看历史git log --oneline --graph
看改动git diff / git diff --staged
推送git push / git push -u origin main
拉取git pull / git fetch
新建分支git switch -c feature
切换分支git switch main
合并分支git merge feature
取消暂存git restore --staged <file>
丢弃改动git restore <file>
撤销提交git revert HEAD
修改上次提交git commit --amend
克隆仓库git clone <url>
查看远程git remote -v

日常工作 90% 的操作都在这张表里。遇到更复杂的场景,比如跨分支搬运提交(cherry-pick)、压缩历史(rebase -i)、二分查找 bug(bisect),在 06-从工具到基础设施:演进与现代范式07-安全实践、协作规范与工具生态 里会涉及。