繁体   English   中英

将删除内容移至git中的分支

[英]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 mergegit cherry-pick进行得很干净时,即没有对删除旧功能的代码应用其他更改时,恢复该功能将非常容易。 往下看,看看这将有多严重。 要恢复旧功能,开发人员将不得不筛选一堆分支以找到合适的分支来复活。 Git为搜索历史记录提供了出色的支持,我们从缺乏这些长期存在的mulligan分支成为常见的做法中可以看出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM