无论你有多大的经验,软件开发的工艺不可能不犯错误。但将普通程序员与伟大程序员区分开来的是,他们知道如何撤销他们的错误
如果你使用Git作为你的版本控制系统,你已经有了大量的 "撤销工具 "在手。这篇文章将向你展示用Git撤销错误的五种强有力的方法。
丢弃一些本地修改
编码通常是一个混乱的过程。有的时候,你会觉得自己在向前走两步,又退后一步。换句话说:你编写的一些代码是很好的......但有些却不是那么好。这就是Git可以帮助你的地方:它允许你保留好的东西,抛弃那些你不再需要的修改。
让我们来看看一个 "本地 "修改(也就是我们还没有提交的修改)的例子。
注意:为了更好地了解情况,我在一些截图中使用了Tower Git桌面客户端。你不需要使用Tower来学习本教程。
让我们先在general.css 中解决这个问题。我们所做的修改完全走错了方向。让我们撤销所有的修改,重新创建该文件的最后提交状态。
$ git restore css/general.css
请注意,我也可以使用git checkout 命令来实现同样的结果。但由于git checkout 有许多不同的工作和意义,我强烈倾向于使用稍新的git restore 命令(它只专注于这些类型的任务)。
我们在index.html 中的第二个问题有点儿棘手。我们在这个文件中所作的一些修改实际上是很好的,而只有一些需要撤销。
再一次,git restore 来拯救我们--但这次用的是-p 标志,因为我们想深入到 "补丁 "级别。
$ git restore -p index.html
然后,Git会牵着你的手问你--对于该文件中的每一块改动--你是否想放弃它。
你会注意到我在第一块上打了 "n"(为了保留它),在第二块上打了 "y"(为了丢弃它)。在这个过程结束后,你可以看到只有第一个有价值的修改块幸存下来--就像我们想要的那样
将一个特定的文件恢复到以前的状态
有时你会想把一个特定的文件恢复到特定的修订版。例如,你知道index.html ,在某个较早的时间点工作得很好,但现在不行了。这时你想让时间倒流,但只是针对这个特定的文件,而不是针对整个项目
我们首先要找出的是我们要恢复的确切版本。通过正确的参数设置,你可以让git log 命令只显示单个文件的历史。
$ git log -- index.html
这只显示了index.html 被修改过的提交,这对我们找到破坏事情的 "坏苹果 "修订版很有帮助。
如果你需要更多的信息,想看看这些提交的内容,你可以让 Git 用-p 标志显示这些提交的实际变化。
$ git log -p -- index.html
一旦我们找到了破坏我们可爱的小文件的错误提交,我们就可以继续修复这个错误。我们要做的就是把文件恢复到坏提交之前的版本。这一点很重要:我们不希望把文件恢复到引入错误的那个提交,而是恢复到最后的良好状态--在那之前的一个提交。
$ git checkout <bad-commit-hash>~1 -- index.html
在错误提交的哈希值上添加~1 将会指示 Git 做到这一点:在被引用的版本之前的一个版本。
执行该命令后,你会发现index.html 在你的本地工作副本中被修改。Git为我们恢复了该文件的最后一个良好版本
继续阅读:在SitePoint 上用Git撤销错误的5种方法。