每位软件工程师使用的15个Git命令(以及它们为何比你想象的更重要)
Source: Dev.to
介绍
很长一段时间,我一直把 Git 当成必须忍受的东西——输入一个命令,记住它,然后祈祷它能正常工作。它让人感到畏惧,因为 Git 会记住每一次错误,但一旦你不再把它当成魔法,也不把它当成在评判你,学习它的压力就会大大减轻。你不需要 50 条命令;只要冷静、刻意地使用 15 条核心命令,就能覆盖绝大多数真实工作流。
git status — 检查仓库当前状态
显示哪些文件已修改、已暂存、未跟踪或已准备提交。
git status
常见错误
直接运行 git status 后就提交或删除了错误的文件,因为没有先核对输出结果。
git init — 初始化一个新的 Git 仓库
通过在项目目录中添加版本控制跟踪,创建一个新的 Git 仓库。
git init
常见错误
在已经初始化的仓库内部再次运行 git init,会生成嵌套的 .git 文件夹,导致 Git 混乱。
git clone — 本地复制远程仓库
下载远程仓库并创建完整的本地副本,包括提交历史。
git clone
git add — 将更改暂存以备下次提交
把文件的改动移入暂存区,以便在下一次提交时包含这些改动。
git add . # 暂存当前目录下的所有内容
git add * # 暂存所有文件(如果 shell 展开它们,包括隐藏文件)
git add -A # 暂存所有改动,包括删除的文件
常见错误
盲目使用 git add .,不小心把本不想提交的文件(例如大二进制文件或机密)也暂存进来了。
git commit — 保存更改的快照
将已暂存的更改记录为项目历史中的一次快照,并附上描述性信息。
git commit -m "你的简洁、描述性的提交信息"
常见错误
提交时没有写有意义的说明,或忘记先暂存想要提交的更改。
git log — 查看提交历史
列出之前的提交,显示更改、作者和时间戳等信息。
git log
git log --oneline --graph --decorate # 紧凑、可视化的视图
常见错误
误以为 git log 只显示当前分支的历史;实际上它会包含来自其他分支的合并提交,除非进行过滤。
git diff — 查看具体改动
逐行显示文件版本、提交或分支之间的差异。
git diff # 未暂存的改动
git diff --staged # 已暂存的改动
git diff HEAD~1 HEAD # 两次提交之间的改动
常见错误
跳过对 git diff 的检查,直接提交代码,却不知道到底改了什么。
git branch — 管理并行开发
创建、列出、重命名或删除用于独立开发的分支。
git branch # 列出分支
git branch feature-x # 创建新分支
git branch -d old-branch # 删除分支
常见错误
直接在 main(或 master)上工作,而不创建特性分支,容易导致历史交叉混乱。
git checkout / git switch — 安全切换分支
两个命令都可以切换分支;git switch 是更新、更直观的写法。
git checkout feature-x # 传统语法
git switch feature-x # 推荐语法
git checkout -- <file> # 从特定提交恢复文件
常见错误
使用 git checkout 恢复文件时未指定提交,导致意外丢失本地修改。
git merge — 合并不同分支的改动
把一个分支的改动合并到另一个分支,合并它们的历史。
git checkout main
git merge feature-x
常见错误
合并前没有先拉取最新的远程改动,容易产生不必要的冲突。
git pull — 更新本地仓库
从远程仓库获取改动并将其合并到本地。
to your current branch (by merge or rebase, depending on configuration).
git pull # default (usually merge)
git pull --rebase # rebase instead of merge
Common mistake
在工作区有未提交更改的情况下运行 git pull,可能导致合并冲突或中止操作。
git push — 与他人共享提交
将本地提交上传到远程仓库,以便他人访问它们。
git push origin main
git push -u origin feature-x # set upstream tracking
Common mistake
推送未经审查的提交,或推送会重写共享历史的提交(例如在 git reset --hard 之后)。
git stash — 临时保存未完成的工作
存储未提交的更改,以便你可以返回到干净的工作目录。
git stash # save current changes
git stash list # view saved stashes
git stash pop # reapply the most recent stash and remove it
git stash apply stash@{2} # apply a specific stash without dropping it
Common mistake
忘记应用或删除 stash,导致隐藏的更改在以后引起混乱。
git reset — 有控制地撤销更改
移动当前分支指针,并可选地更新暂存区和工作目录。
git reset --soft HEAD~1 # keep changes staged
git reset --mixed HEAD~1 # default: keep changes unstaged
git reset --hard HEAD~1 # discard all changes
Common mistake
在未意识到会永久丢弃工作内容的情况下使用 --hard,尤其在共享分支上。
git revert — 在共享历史中安全地撤销更改
创建一个新提交,撤销先前提交的效果,而不重写历史。
git revert
Common mistake
在共享分支上选择使用 git reset 而不是 git revert,这会重写历史并干扰团队成员。
构建对 Git 的信心
Git 的信心不会凭空出现;它会随着你有意识地使用一套核心命令而逐步提升。总有一天,你会不再惊慌,毫不犹豫地运行 git status,并且清楚每个命令的作用。
Tip: 避免盲目复制命令。理解每个操作背后的意图,让 Git 成为你信赖的工具,而不是焦虑的来源。
提交愉快! 💙