2

在过去的几个月里,我多次为某个功能开发代码,将该功能提交到 git 存储库,然后在以后决定删除其中一些功能。为了保持代码库干净,我最终必须做的是删除提交给 git 的文件或部分文件并提交这些更改。

但是,为了以后可以轻松恢复已删除的代码,我执行了一个额外的步骤,即在其他地方克隆存储库,在删除之前检查提交,复制已更改的文件(使用同上,甚至有时手动),然后将更改提交到新分支。这个额外的步骤使我能够在分支中抽象出已删除的特性,并在稍后阶段通过合并分支很容易地将特性恢复到代码库中。

这是一种常见的做法吗?更重要的是,我是否缺少一个允许我开箱即用的 git 功能。如果是这样,实现此目的的命令是什么?

4

2 回答 2

3

git checkout <sha1> filepath/filename将修订版 sha1 中的文件放入您的工作副本。

git revert是恢复提交所做的更改,包括合并提交。您还可以还原还原。

请不要克隆,因为它的过程太繁重,结帐工作得更快。

于 2013-03-01T16:21:09.567 回答
3

假设您在 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 分支中看到这一点。

于 2013-03-01T17:48:41.213 回答