Git 基础工作流与协作场景
本文分为两部分:第一部分是日常使用中最常用的文件操作命令(状态查看、暂存、提交、撤销、删除、重命名);第二部分是团队协作中常见的场景化流程(个人提交、功能分支开发、同步主分支、误提交撤销等),帮助你把命令用在正确的场景里。
一、日常文件操作
1. 查看状态
git status # 完整状态(显示哪些文件被修改、新增、删除)
git status -s # 简洁状态(?? 未跟踪,M 修改,A 新增,D 删除)
示例输出(简洁模式):
M README.md # 已修改但未暂存
A new.txt # 已新增并已暂存
?? unknown.txt # 未跟踪文件
2. 添加文件到暂存区
git add file.txt # 添加单个文件
git add . # 添加当前目录下所有变化(包括新建、修改、删除)
git add --all # 添加所有变化(等价于 git add -A)
- 暂存区是下次
commit的内容集合。 git add后,文件状态变为staged(已暂存)。
3. 提交到本地仓库
git commit -m "提交说明" # 提交暂存区内容
git commit -am "说明" # 跳过暂存区,直接提交已跟踪文件的修改(不包含新添加的未跟踪文件)
示例:
git commit -m "fix: 修复登录页面的样式问题"
- 提交后会生成一个唯一的 commit ID(如
a1b2c3d),记录版本快照和说明。
4. 撤销修改(未提交)
撤销工作区的修改(还原到最近一次 commit 或 add 的状态)
git checkout -- file.txt # 丢弃工作区中对该文件的修改
注意:此操作不可恢复,请谨慎使用。
将文件从暂存区撤回到工作区(保留修改内容)
git reset HEAD file.txt # 旧语法
git restore --staged file.txt # Git 2.23+ 推荐
执行后,文件变为 modified(已修改但未暂存),你可以在工作区继续编辑。
更完整的提交回退(
reset --soft/--mixed/--hard)与安全撤销(revert)说明,见 查看历史与撤销。
5. 删除文件
git rm file.txt # 删除文件并自动暂存删除操作(git add 的等效)
git rm --cached file.txt # 仅从 Git 中删除跟踪(不再管理),但保留工作区文件
git rm后需要git commit才能最终从版本库中删除。
6. 重命名 / 移动文件
git mv old_name new_name # 重命名文件,自动暂存新旧路径
git mv 相当于:
mv old_name new_name
git add new_name
git rm old_name
执行后使用 git status 会看到 renamed 状态,直接 commit 即可完成重命名。
7. 典型工作流示例
# 1. 查看状态
git status
# 2. 修改文件并添加
echo "hello" >> README.md
git add README.md
# 3. 提交
git commit -m "update README"
# 4. 不小心修改了文件,想撤销
git checkout -- README.md
# 5. 删除不需要的文件
git rm old.txt
git commit -m "remove old.txt"
# 6. 重命名文件
git mv src/app.js src/main.js
git commit -m "rename app.js to main.js"
二、常见协作场景
场景 1:个人项目简单提交
适合单人开发的小项目,或对主分支有直接推送权限的场景。
# 将所有修改添加到暂存区
git add .
# 提交到本地仓库(使用规范的提交信息)
git commit -m "feat: 添加用户登录功能"
# 推送到远程 main 分支
git push origin main
提示:提交信息建议遵循 Conventional Commits 规范,如
feat:、fix:、docs:等。
场景 2:基于主分支开发新功能
团队协作的标准流程,使用功能分支(feature branch)隔离开发,然后通过 Pull Request (PR) / Merge Request (MR) 合并。
# 1. 从主分支创建并切换到新功能分支
git checkout -b feature-login
# 2. 进行代码修改(编辑、添加文件等)
# 3. 将修改添加到暂存区并提交
git add .
git commit -m "feat: 实现登录页面"
# 4. 将新分支推送到远程仓库(并设置上游跟踪)
git push -u origin feature-login
# 5. 在 GitHub / GitLab 上发起 Pull Request (PR) 或 Merge Request (MR)
# 等待 Code Review 和 CI 检查通过后,由维护者合并到 main 分支
分支相关命令(创建、切换、删除、合并)详见 分支与标签管理。
场景 3:同步远程 main 的最新代码到当前分支
当其他开发者已向 main 推送了新代码,你需要将这些更新合并到你正在工作的功能分支中。
方式一:使用 merge(产生一个合并提交)
# 确保当前在功能分支
git checkout feature-login
# 获取远程最新提交(不自动合并)
git fetch origin
# 将远程 main 合并到当前分支
git merge origin/main
# 如有冲突,解决后 git add . && git commit
方式二:使用 rebase(保持线性历史,更干净)
git checkout feature-login
# 拉取远程 main 并变基
git fetch origin
git rebase origin/main
# 如果出现冲突,解决后 git add . && git rebase --continue
# 变基完成后,由于历史改变,需要强制推送(若已推送过)
git push --force-with-lease origin feature-login
选择建议:个人或小团队可以使用
rebase保持历史整洁;公共分支上已推送的提交尽量避免rebase(除非团队约定)。若合并时出现冲突,解决步骤见 查看历史与撤销。
场景 4:误提交到 main,需要撤销
情况一:尚未推送到远程
# 1. 撤销最近一次提交(保留修改在暂存区)
git reset --soft HEAD~1
# 2. 暂存当前的修改(可选,为了切换到正确分支)
git stash
# 3. 创建正确的功能分支
git switch -c correct-branch
# 4. 恢复暂存的修改
git stash pop
# 5. 添加并提交到正确分支
git add .
git commit -m "feat: 正确的功能"
# 6. 后续推送新分支
git push -u origin correct-branch
情况二:已经推送到远程 main(公共分支)
务必不要使用 git reset 改写公共历史,应使用 git revert 反向撤销,安全且不影响协作者(原理见 查看历史与撤销)。
# 1. 找到误提交的 commit hash(假设为 abc123)
git log --oneline
# 2. 创建一个抵消该提交的新提交
git revert abc123 --no-edit
# 3. 推送撤销后的结果
git push origin main
git revert 会生成一个新的提交,其内容正好是误提交的逆操作,其他开发者正常 git pull 即可同步。
三、场景与命令总结
| 场景 | 核心命令 | 注意事项 |
|---|---|---|
| 简单提交 | git add . → git commit -m "..." → git push | 确保当前分支正确 |
| 功能分支开发 | git checkout -b → git push -u origin → 创建 PR | 分支命名可包含 feature/、fix/ 前缀 |
| 同步远程 main | git fetch origin → git merge origin/main 或 git rebase origin/main | 公共分支上避免 rebase 已推送的提交 |
| 误提交到 main | 未推送:git reset --soft HEAD~1 + 重建分支;已推送:git revert <hash> | 已推送禁止用 reset,使用 revert 安全撤销 |
四、注意事项
git checkout -- <file>、git reset --hard等命令不可逆,操作前请确认改动已备份或确实不需要。- 已推送到公共分支(如
main)的提交,避免使用rebase、reset、amend改写历史,优先用revert。 - 团队协作中,提交信息建议统一规范(如 Conventional Commits),便于自动生成 changelog 与代码追溯。
掌握本文的日常操作与协作场景,即可高效地进行版本管理与团队协作。
参考文献
| 资料 | 说明 |
|---|---|
| Pro Git | 官方书 |
| Git 文档 | 命令 |
| Conventional Commits | 提交信息规范 |
| 运维导读 | 学习路径 |
相关文章
Git 分支、远程协作与标签管理
涵盖分支的创建、切换、合并与删除,远程仓库的管理、推送与拉取,以及标签(Tag)的创建、查看、推送与删除,是团队协作的核心内容。
Git 查看历史、撤销回退与冲突解决
涵盖 git log / git diff 查看提交历史与差异,commit --amend / reset / revert 的撤销与回退方式对比,以及合并、拉取、变基时冲突的产生原因与解决步骤。
Git 基础概念与命令速查
Git 是目前最流行的分布式版本控制系统。本文介绍工作区/暂存区/仓库等核心概念、文件状态流转,并附上日常开发最常用的命令速查表,适合入门学习与日常查阅。
Git 安装、配置与仓库初始化
涵盖 Windows / macOS / Linux 下 Git 的安装方式、首次使用的全局配置(用户名、邮箱、别名等)、创建或克隆仓库的方式,以及 .gitignore 忽略规则的编写方法。
运维与协作导读
本目录覆盖日常开发运维中的 Git 版本控制、Docker 容器化与 Nginx 服务网关,与 工程化 · Git、部署相关 等章节互补,提供完整的十阶段学习路径。
Git 配置
版本控制常用 .gitignore(忽略不需纳入仓库的文件)与 .gitattributes(统一换行、diff、合并策略等)。见 工程化概览。
Series
git
5 / 5