Git 命令速查指南:最常用命令、撤销操作与冲突解决按场景查
把日常真正会敲的 Git 命令按场景整理:add/commit/push/pull 的基本流、branch/merge/rebase 的分支活、reset/revert/checkout 三种撤销的区别,以及冲突解决步骤,带真实命令和常见坑。
Git 命令速查指南:常用命令、撤销操作与冲突解决按场景查
Git 难,不是因为命令多,是因为很多命令名字相近、行为却差很远。reset 有三档,checkout 干两件不相关的事,push -f 和 push --force-with-lease 只差几个字母却能毁掉同事半天的活。这篇文章按你实际会遇到的场景把它们排开,不是把 man 手册抄一遍。想要可搜索、点分类即时过滤的完整版,可以直接用 Git 命令速查,它每条都带说明、常见坑和能拷贝的例子。
每天都敲的八条基本流
绝大多数工作日,你只用得到这八条:
git add <file>,把改动放进暂存区,git add .加全部。git commit -m "msg",把暂存的改动做成一个提交。git push,把本地提交推到远端。git pull,拉远端改动并合并进当前分支。git branch feat-x,建分支;git switch feat-x切过去。git merge feat-x,把 feat-x 合进当前分支。git rebase main,把当前分支的提交搬到 main 最新点之上,历史更线性。git stash,把没提交的改动临时收起来,切分支前救急用。
这里有个新人最容易踩的坑:git stash 默认不带未跟踪文件(还没 add 的新文件),要带得加 git stash -u。我自己第一年就因为这个,切分支时把一个刚写完还没 add 的脚本弄丢了,从此养成了 stash 前先 git status 看一眼的习惯。
三种撤销,先搞清你要撤的是什么
撤销是最容易出事的一块,因为 reset、revert、checkout 撤的根本不是一回事。
git reset --soft HEAD~1,撤掉最近一个提交,但改动留在暂存区。提交信息写错了、想把两个提交合一个,用这档最舒服。git reset --mixed HEAD~1(默认),撤掉提交,改动退回工作区,不在暂存区。git reset --hard HEAD~1,撤掉提交并丢掉改动。这档最危险,丢掉的工作区改动如果从没提交过,reflog 也救不回。git revert <sha>,不删历史,而是新建一个反向提交来抵消。已经推到共享分支的提交,该用 revert,不该用 reset。git checkout -- <file>/git restore <file>,丢弃单个文件的工作区改动,同样不可逆。
举个我常用的真实例子:刚 commit 完发现少改了一行,又不想多出一个零碎提交,我会 git reset --soft HEAD~1,改动原封不动回到暂存区,补完那一行再重新 commit。整个过程历史上只留一个干净提交。
一不小心 reset --hard 了,还能救吗
大概率能,前提是动作快。git reflog 会列出最近 90 天每一次 HEAD 移动,每条都带 SHA。找到出事前那一项,要么 git reset --hard HEAD@{2} 直接回退,要么 git branch rescue HEAD@{2} 把它存成新分支再说。
要记住 reflog 只存在本地,所以必须在出事那台机器上、垃圾回收跑之前操作。共享分支被同事强推覆盖的最坏情况,就是找一个本地 reflog 还留着那个 SHA 的人,让他强推回去。
解决合并冲突的固定动作
冲突不可怕,它每次都是同一套流程:
git merge feat-x或git pull报冲突后,git status看哪些文件冲突了。- 打开文件,找
<<<<<<<、=======、>>>>>>>三段标记,删掉标记、留下你想要的内容。 - 改完
git add <file>把它标记为已解决。 git commit完成合并(merge 冲突会带默认信息),或 rebase 场景下git rebase --continue。
中途想反悔,merge 用 git merge --abort,rebase 用 git rebase --abort,直接回到没动手前的状态。
push -f 的代价
git push --force 是无条件覆盖远端。同事在你上次 fetch 之后又推了提交?他的提交悄无声息地没了。改用 git push --force-with-lease:它会先确认远端 ref 还是你上次看到的那个,变了就拒绝推。少敲那几个字母省下的几秒,远不抵从同事本地 reflog 里找回他提交的半天。把"永远不用 -f,永远 --force-with-lease"刻进肌肉记忆就好。
按场景记,而不是按字母记
与其背命令表,不如记住"我现在要干嘛"再去查对应那几条。提交流就 add/commit/push,分支活就 branch/switch/merge/rebase,撤销先分清是撤提交(reset/revert)还是撤文件(checkout/restore)。把这套心智图建起来,再配合可搜索的 Git 命令速查 随手查,比死记硬背快得多。顺手提一句,提交前别忘了配好 .gitignore 生成器,把 .env、node_modules 这类不该进库的东西先挡在外面,从源头省掉一堆"误提交密钥"的麻烦。
Made by Toolora · Updated 2026-06-13