[英]Moving deletions to a branch in git
在过去的几个月中,有很多次我为某个功能开发了代码,将该功能提交到git存储库,然后在以后的某个日子决定删除其中的一些功能。 为了使代码库保持整洁,我最终要做的是删除已提交给git的文件或文件的一部分,然后提交这些更改。
但是,为了让删除的代码在以后轻松恢复,我经历了一个额外的步骤:将存储库克隆到其他位置,在删除之前检查提交,复制更改过的文件(使用ditto甚至是有时手动),然后将更改提交到新分支。 这个额外的步骤使我能够在分支中抽象出已删除的功能,并在以后的阶段通过合并分支很容易地将该功能恢复到代码库中。
这是常见的做法吗?更重要的是,我是否错过了一个git功能,该功能使我可以立即执行此操作。 如果是这样,执行此操作的命令是什么?
git checkout <sha1> filepath/filename
文件从版本sha1导入到您的工作副本中。
git revert
是还原由提交所做的更改,包括合并提交。 您还可以还原还原。
请不要克隆,因为这太繁琐了,所以结帐的速度要快得多。
假设您正在Git的git仓库中工作,那么您就有个好主意。
$ git rm -rf Documentation $ git commit -m 'Documentation is for the weak'
这导致了以下历史记录。 (注意: git lol
是非标准但非常有用的别名。)
$ git lol * d55a922 (HEAD, master) Documentation is for the weak * 443d803 (origin/master, origin/HEAD) Merge branch 'maint' |\ | * 8d44277 (origin/maint) Update draft release notes to 1.8.1.5 | * 6f0c336 Merge branch 'ef/non-ascii-parse-options-error-diag' into maint | |\ ...
要使自己更加满意,请在新创建的提交处签出一个分支,然后在其中还原。
$ git checkout -b mulligan/delete-all-documentation $ git revert --no-edit HEAD
现在用
$ git checkout master
你可以回去上班了
假设您向母版添加了新的提交,那么您的历史记录将变为
$ git lola * b4d76d9 (HEAD, master) Add new feature X | * 84b0e21 (mulligan/delete-all-documentation) Revert "Documentation is for the weak" |/ * d55a922 Documentation is for the weak | * 46b564f (origin/pu) Merge branch 'pc/subtree-add-before-fetch' into pu ...
这不是常见的做法。 仅当git merge
或git cherry-pick
进行得很干净时,即没有对删除旧功能的代码应用其他更改时,恢复该功能将非常容易。 往下看,看看这将有多严重。 要恢复旧功能,开发人员将不得不筛选一堆分支以找到合适的分支来复活。 Git为搜索历史记录提供了出色的支持,我们从缺乏这些长期存在的mulligan分支成为常见的做法中可以看出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.