假设您在 Git 的 git 存储库中工作,并且您有一个好主意。
$ git rm -rf 文档
$ git commit -m '文档是为弱者准备的'
这导致了以下历史。(注意:git lol
是一个非标准但非常有用的别名。)
$混帐哈哈
* d55a922 (HEAD, master) 文档是为弱者准备的
* 443d803 (origin/master, origin/HEAD) 合并分支'maint'
|\
| * 8d44277 (origin/maint) 更新草稿发行说明到 1.8.1.5
| * 6f0c336 将分支 'ef/non-ascii-parse-options-error-diag' 合并到 maint
| |\
...
为了给自己一个 mulligan,在你新提交的提交中签出一个分支并在那里恢复。
$ git checkout -b mulligan/delete-all-documentation
$ git revert --no-edit HEAD
现在有了
$ git结账大师
你可以回去工作了。
假设您向 master 添加了一个新提交,那么您的历史记录变为
$ 混帐萝拉
* b4d76d9 (HEAD, master) 添加新功能 X
| * 84b0e21 (mulligan/delete-all-documentation) 恢复“文档是为弱者准备的”
|/
* d55a922 文档适用于弱者
| * 46b564f (origin/pu) 合并分支 'pc/subtree-add-before-fetch' 到 pu
...
这不是常见的做法。git merge
只有在或git cherry-pick
干净利落的情况下,恢复该功能将非常容易,也就是说,如果没有对删除旧功能的代码应用其他更改。往下看,看看这将如何扩展。要恢复旧功能,开发人员将不得不筛选一堆分支以找到合适的恢复。Git 对搜索历史有很好的支持,我们可以从缺乏这些长期存在的 mulligan 分支中看到这一点。