前言:为什么你需要掌握命令行 Git?
在 Java 及各类后端开发中,尽管 IDEA 等 IDE 提供了强大的可视化 Git 插件,但真正的高手都习惯在终端中敲击命令。命令行不仅响应更快,而且在处理复杂合并、紧急回退、交互式变基等高级场景时,拥有可视化界面无法比拟的掌控力。本文将为你梳理日常开发中最高频、最实用的 Git 命令,助你打造丝滑的代码管理工作流。
一、 基础工作流:提交与同步
这是每天至少执行几十次的操作,必须形成肌肉记忆。
1. 查看状态与差异
git status:随时掌握工作区、暂存区和仓库的状态。git diff:查看工作区未暂存的具体代码修改。git diff --staged:查看已暂存但还未提交的修改(提交前必查)。
2. 暂存与提交
git add <file>/git add .:将指定文件或当前目录所有变更添加到暂存区。git commit -m "feat: 新增用户登录接口":提交代码。强烈建议 遵循语义化提交规范(如feat,fix,refactor),让提交历史一目了然。git commit --amend -m "new message":如果刚提交完发现漏了文件或者注释写错,用这个命令可以合并到上一次提交中(注意:未推送前使用)。
3. 远程同步
git pull origin <branch>:拉取远程最新代码并自动合并。git push origin <branch>:将本地分支推送到远程。git push -u origin <branch>:首次推送新分支时使用,自动建立本地与远程的跟踪关系,后续直接git push即可。
二、 分支管理:隔离开发与合并
现代开发离不开分支模型(如 Git Flow 或 Trunk Based)。
git checkout -b feature/user-login或git switch -c feature/user-login:创建并切换到新分支(推荐 Git 2.23+ 引入的switch命令,语义更清晰)。git branch -d feature/user-login:删除已合并的本地分支。git merge feature/user-login:将特性分支合并到当前分支(如develop或main)。git cherry-pick <commit-hash>:高频救场命令。当你只需要另一个分支上的某一次或几次提交,而不想合并整个分支时,用它精准"摘取"提交。
三、 撤销与回退:后悔药的正确吃法
写错代码、推错分支是常态,掌握以下命令能让你从容应对:
1. 工作区与暂存区撤销
git restore <file>:丢弃工作区的修改,恢复为暂存区状态(替代了老式的git checkout -- <file>)。git restore --staged <file>:将文件从暂存区移出,保留工作区的修改。
2. 提交历史回退
git reset --soft HEAD~1:撤销最后一次提交,但保留所有修改在暂存区。适合重新组织提交。git reset --mixed HEAD~1:撤销提交并清空暂存区,修改保留在工作区(默认行为)。git reset --hard HEAD~1:危险操作! 彻底撤销提交并丢弃所有修改。仅在确认代码完全不需要时,在本地分支使用。git revert <commit-hash>:生成一个新的提交 来撤销指定提交的修改。这是处理已推送到远程的公共分支错误的唯一安全方式。
四、 进阶技巧:提升协作效率
1. 变基(Rebase):打造线性历史
git rebase main:将当前分支的提交"接"到 main 分支的最新节点之后。- 核心价值:消除无意义的 merge commit,让提交历史像一条直线一样整洁。
- 铁律 :永远不要在公共分支(如 main, develop)上执行 rebase,只在你个人的特性分支上使用。
2. 储藏(Stash):临时切换任务
当你正在写一半代码,突然被要求修复一个紧急 Bug:
git stash save "正在开发登录逻辑":将当前未完成的修改暂存起来,工作区瞬间干净。git checkout hotfix/bug-123:切换分支修 Bug。git stash pop:修完 Bug 切回来,恢复之前的开发进度。
3. 忽略文件(.gitignore)
在项目根目录创建 .gitignore 文件,将编译产物(如 /target/)、IDE 配置文件(如 .idea/)和日志文件加入其中,避免污染代码仓库。
总结
Git 的强大在于其分布式的设计和丰富的操作空间。对于 Java 开发者而言,熟练掌握 cherry-pick、rebase、stash 和 reset/revert 的区别,是区分"会用 Git"和"精通 Git"的分水岭。建议在日常开发中刻意练习这些命令,逐步摆脱对可视化界面的依赖。