旁注

git 里几个总要查的命令

技术约 200 字

这些命令每次用都要搜一遍,干脆记在这里。都是在自己的仓库里用过的,多人协作的仓库请先想清楚再动。

改上一次提交

漏加了一个文件,或者提交说明里有错字:

git add 漏掉的文件
git commit --amend            # 会打开编辑器改说明
git commit --amend --no-edit  # 只补文件,不改说明

已经推送过的提交就别这么干了,除非确定这个分支只有自己在用。

撤销暂存,但保留改动

git restore --staged 文件名

以前一直用 git reset HEAD 文件名,效果一样,新写法的意思更清楚。

找回“丢掉”的提交

reset 错了先别慌,reflog 记着 HEAD 走过的每一步:

git reflog
git reset --hard HEAD@{2}

默认能保留九十天左右,足够反悔了。

看某几行是谁、什么时候改的

git blame -L 40,60 path/to/file
git log -L 40,60:path/to/file   # 连同每次改动的 diff 一起看

第二条比 blame 好用得多,能看到这几行完整的演变过程。

临时收起手头的改动

git stash push -m "写到一半的目录页"
git stash list
git stash pop

加 -m 是吃过亏的:stash 一多,列表里全是 WIP on main,根本分不清哪个是哪个。

只拿另一个分支里的一个文件

git restore --source=other-branch -- path/to/file

不用切分支,也不用 cherry-pick 整个提交。

10 月 11 日补充:加了 git log -L 和 stash 的 -m。