Git命令行备忘手册

工具相关 ·

当你沉浸在代码编写中,突然意识到上一个提交信息有拼写错误,或者需要紧急回退到某个稳定版本,却记不清具体该用哪个命令组合时,那种焦虑感想必每个开发者都经历过。命令行的强大在于精确控制,但众多Git命令和参数组合往往让人望而生畏,尤其是在高压环境下需要快速解决问题时。

基础操作与仓库管理

Git的核心在于追踪文件变化并将其保存为历史记录。初始化新仓库最常用的是git init,它会在当前目录创建一个隐藏的.git文件夹,这是Git跟踪所有版本信息的起点。如果要从远程仓库复制代码,git clone [URL]会下载整个历史记录,并自动设置远程仓库名为origin。克隆后,你可以使用git remote -v查看当前配置的远程仓库地址,这对于确认连接是否正确或重命名远程仓库很有帮助。

提交更改是Git日常使用的核心操作。首先使用git add [文件名]将修改的文件添加到暂存区,或者用git add .添加所有修改。暂存区的概念是Git的一大特点,它允许你准备一组更改后再一起提交。执行git commit -m "提交信息"会将暂存区的内容保存为一个新的历史记录点。提交信息应该清晰描述更改内容,遵循团队约定的格式,这有助于后续理解变更历史。如果提交后发现信息有误,可以用git commit --amend修改最后一次提交,但要注意这个命令仅适用于尚未推送到共享仓库的提交。

分支管理与协作

分支是Git最强大的功能之一,它允许你在不影响主线代码的情况下进行开发。创建新分支使用git branch [分支名],切换到该分支则用git checkout [分支名],或者用git switch [分支名](这是较新版本推荐的命令)。Git的分支本质上是指向提交的指针,因此创建和切换分支几乎不消耗资源。删除不再需要的分支可以用git branch -d [分支名],对于未合并的分支则需要使用-D参数强制删除。

与他人协作时,远程仓库操作必不可少。git fetch [远程仓库名]会下载最新的远程引用但不自动合并,让你可以查看变化。git pull [远程仓库名] [分支名]则相当于先fetch后merge,将远程更改合并到当前分支。推送本地更改到远程仓库使用git push [远程仓库名] [分支名]。如果远程分支有本地没有的提交,直接推送会失败,需要先拉取合并。更安全的强制推送是git push --force-with-lease,它会在强制前检查远程状态,避免无意覆盖他人的工作。

历史查看与变更追踪

理解项目历史对于维护代码质量至关重要。git log命令显示提交历史,默认按时间倒序排列,每个提交都有唯一的SHA-1哈希值。你可以用git log --oneline --graph --all获得更简洁的图形化视图,这特别适合展示复杂分支结构。查看特定文件的变更历史可以使用git log [文件名],而git blame [文件名]则会显示每一行代码的最后修改者。

当需要精确了解两次提交之间的差异时,git diff [提交1] [提交2]是强大工具。不加任何参数的git diff会显示工作区与暂存区之间的差异,而git diff --cached则显示暂存区与最新提交之间的差异。对于大型项目,快速定位引入问题的提交可以使用git bisect,这是一个二分查找工具,通过标记已知好和已知的坏提交,Git会自动帮你缩小问题范围,大大减少调试时间。

撤销操作与高级技巧

开发过程中难免需要撤销某些更改。对于已提交的更改,git revert [提交哈希]会创建一个新的提交来撤销指定提交的更改,这是最安全的撤销方式,不会修改历史记录。如果需要完全丢弃某些提交,git reset [提交哈希]会将HEAD移回指定提交,其中--soft仅移动HEAD,--mixed(默认)会重置暂存区,而--hard会同时丢弃工作区更改——这个操作不可逆,使用前务必确认。

临时保存当前工作状态以便切换分支或处理紧急任务时,git stash非常有用。它会保存当前工作区和暂存区的状态,让你切换到干净的工作目录。之后可以用git stash list查看所有保存的stash,git stash apply [stash编号]恢复指定stash,或者git stash pop恢复最近保存的stash并将其从列表中移除。对于大型仓库或需要排查问题时,git reflog记录了HEAD的所有移动历史,这是找回丢失提交或分支的最后防线。

实战检查清单

为确保日常Git操作顺畅,养成以下习惯:每次执行重要操作前先用git status确认当前状态;创建新功能或修复bug时先创建分支;提交前检查暂存区内容是否正确;修改已推送的提交前与团队确认;遇到问题时先尝试用git reflog查找丢失的提交;定期清理不再需要的分支和stash;为团队设置统一的提交信息格式和分支命名规范。通过这些实践,你可以充分发挥Git的版本控制能力,同时避免常见陷阱。

阅读 7