图解说明如何修复 Git 错误
这些是我在学习Chris Achard在 egghead 上开设的“修复常见 Git 错误”课程时所做的图文笔记。
本课程是对 Git 基本结构、添加和删除提交以及(至关重要的)撤销各种错误的绝佳复习。
Git 的基本结构
Chris 讲解了 Git 文件可能处于的各种“层级”。我个人需要把它想象成一个空间堆栈才能理解文件是如何在它们之间移动的。
每次我向 GitHub 提交代码时,我的脑海中都会浮现出这样的画面:
我还发现,把“储藏处”想象成一个可以把文件藏起来的侧抽屉,以后再“取出”它们,这种想法很有帮助。
分支是指针
将 Git 分支定义为可以移动的“指针”,这种定义极大地改变了我对它们的看法。
我们可以将指针移动到不同的提交,这些提交只是我们项目在特定时间点的不同版本。
Git 日志
git log这是一个很实用的功能,可以显示你之前的所有提交及其详细信息。不过,它显示的信息比较冗长。
git log --oneline由于它只显示提交哈希值和消息,因此更容易阅读。
git log --graph在终端中绘制一个显示分支和合并的小图
纠正错误
Git 提交修改
git commit --ammend允许我们在最后一次提交中添加或更改文件,以及提交消息。
Git 重置
git reset将文件向后移动。如果您已将文件提交到暂存区或本地仓库,我们可以将其移回工作目录。

Git 为我们提供了三种重置“强度”级别—— git reset --hard,,git reset --soft和混合。
如果没有指定,则默认设置为 mixed,它会将文件从本地仓库移回您的工作文件。
Git 差异
git diff是一个方便的工具,可以查看两次提交或两个文件之间的更改。
您可以使用分支名称或提交哈希值来比较两个提交:git diff main new-feature
您还可以通过传入两个文件名来比较两个文件:git diff path/to/file/ComponentA.js path/to/file/ComponentB.js
分离式头部
“分离的头”听起来可能有点吓人,但其实没那么可怕。它只是意味着我们使用特定的哈希名称检出了某个提交,例如:git checkout 49da32
该提交现在是“头”,因为它是我们项目的最新版本。
它之所以“分离”,是因为我们直接跳转到了那里,而不是在我们通常的分支结构中。我们需要使用以下命令将提交“重新附加”到我们的分支:git checkout -b my-new-branch-name
现在终于不再迷失在 Git 的海洋里了,感觉真好。
希望这些技巧也能让你的 Git 日志不再那么惨不忍睹 :)
克里斯的课程中还有很多我这里没有提到的内容。
👁🗨 如果这些图片难以阅读,您可以在课程页面下载免费的高分辨率 PDF 版本。Dev.to
对图片大小限制较多,因此很难在这里清晰显示。抱歉!








