Git 是分布式版本控制系统。一次清楚的提交会记录项目在某个状态下的快照,并包含作者、说明和父提交等信息。日常使用时,最重要的习惯不是记住所有命令,而是在改变历史或共享内容前先确认状态。

三个常见状态区域

工作区是正在编辑的文件;暂存区保存准备纳入下一次提交的内容;提交历史则保存已经记录的快照。一个已跟踪文件可能在工作区被修改,其中一部分进入暂存区,随后又产生新的未暂存修改。

先查看,再操作

git status
git diff
git diff --staged
git log --oneline

git status 显示分支和文件状态;git diff 默认查看尚未暂存的修改;带 --staged 时查看将进入下一次提交的差异;git log 用于浏览已有提交。

创建一次清楚的提交

git add path/to/file
git diff --staged
git commit -m "说明这次修改的目的"

git add 把指定内容加入暂存区。提交前再次检查暂存差异,可以避免把调试内容、敏感信息或无关修改带进提交。提交说明应表达修改的目的,而不只是重复“修改文件”。

如果一批改动包含多个相互独立的目的,最好拆成多个提交。这样更容易审查,也更容易在出现问题时定位或撤销其中一部分。

与远程仓库协作

git fetch
git pull --ff-only
git push

git fetch 获取远程引用和对象,但不会自动改动当前工作分支。git pull 通常会先获取再整合;示例中的 --ff-only 只允许快进更新,在需要产生合并提交时会停止,让使用者明确决定怎样整合。git push 将本地引用更新发送到远程仓库,是否成功还取决于权限和远程状态。

撤销前先判断内容是否需要保留

未提交的修改可能无法从 Git 历史恢复,因此不要在不理解影响时使用会覆盖工作区或强制改写历史的命令。对于已经共享的提交,通常可以用新的提交反向修改,保留清楚的历史;重写已共享历史则可能影响其他协作者。

执行不熟悉的命令前,先运行 git status,确认所在分支和未提交修改;重要文件还应有独立备份。版本控制不能替代备份。

稳定的基本流程可以概括为:查看状态、阅读差异、选择性暂存、再次检查、创建提交。只要每一步都知道当前内容位于哪个区域,Git 的行为就会容易理解得多。