Git 凭借分布式管理、离线友好、分支策略灵活、部署简单等优势,成了当下最受欢迎的源代码管理工具。但话说回来,一分耕耘一分收获——想真正用好 Git,学习成本确实不低。即便有各种 GUI 工具加持,Git 的难度依然有目共睹:V2EX 上隔三差五就有“如何正确使用 Git”的讨论,Stackoverflow 上超过 10 万个相关问题也足以说明它的复杂性。更要命的是 Git 官方文档存在一个“先有鸡还是先有蛋”的困局——文档虽然写得周全,可如果你连自己碰到的问题叫什么名字都不知道,那根本无从查起。
本文整理自 Katie Sylor-Miller 在日常工作中遇到过、并让他头大的几个 Git 常见问题,以及相应的应对方式。当然,这些方法不是唯一的,也许你有更好的方案——这恰恰是 Git 这套版本控制系统强大的地方。
我刚刚好像搞错了一个很重要的东西,但是 git 有个神奇的时间机器能帮我复原!

reflog 绝对是个实用利器。用它找回不小心删掉的代码、撤销刚添进去却搞坏仓库的改动、拯救失败的 merge,或者单纯想回退到某个老版本——统统可行。
我 commit 完才想起来还有一处小地方要修改!

这种情况太常见了——commit 完跑测试,突然发现某个等号前面少了个空格。当然也可以再把改好的代码重新 commit 一次,然后用 rebase -i 把两次揉到一起,但上面的方法显然更快。
我要改一下上一个 commit message!

如果组内对 commit message 有格式要求,或者忘了在中英文之间加空格——这个命令能救你一命。
我不小心把本应在新分支上的内容 commit 到 master 了!

注意:这个指令必须在错误的 commit 发生后立刻执行。如果已经试过其他操作,那就得用 git reset HEAD@{number} 来代替 HEAD~ 了。
我不小心 commit 到错误的分支上了!

很多人也推荐用 cherry-pick 来解决,用哪种方法全看你心情啦。

我执行了 diff 但是啥也没出现

Git 不会对通过 add 加入暂存区的文件做 diff,除非你加上 --staged 参数。别怀疑,这是个 feature 而不是 bug——不过第一次碰到的时候确实让人有点摸不着头脑。

Git 从入门到放弃

为维护最后的尊严 XD
不知道你在使用 Git 的过程中有没有遇到过让你忍不住掀桌的情况?或者作为 Git 老手,有什么压箱底的小技巧愿意分享?
