更改自定义库时方便的工作流程



我有一个基于特定外部库的自定义ImageManipulation库。(这是在master分支上。)现在,我想测试另一个库如何工作,所以我会这样做:

git checkout -b experiment_new_library

然后,如果我认为这很好,并将其合并到master中,那么什么样的好方法才能用旧的Image库以某种方式"保存"旧的master分支?如果您想回滚到该状态,您应该如何保存该状态?

您总是可以回到旧的提交,这是VCS的目的。如果您想命名或"标记"特定的提交(状态),以便以后可以很容易地找到它,请使用git标记。

但是,如果您想为多个版本的外部库维护代码(可能是后台安全修复等),那么最好为每个版本的外部库使用单独的分支。

要将主分支保存在当前位置以方便将来使用checkout,只需运行

git branch master_backup master

在这里,您可以将master备份替换为任何您喜欢的分支名称,只要它还不存在
如果您想将其存储在origin(或任何其他远程服务器)上,您可以很容易地实现:

git push origin master:master_backup

这将在远程origin中使用本地master的当前内容创建一个名为master_backup的新分支。您可以根据需要随意更改名称。

话虽如此,您实际上并不需要备份分支,因为git存储历史。您所需要做的就是找到合并提交id(它的注释将默认为Merge branch 'experiment_new_library'),然后简单地运行以下操作之一(用合并的提交id替换<commit_id>):

git checkout <commit_id>^                   # This will leave you in a detached HEAD
git checkout -b before_merge <commit_id>^   # This will create a branch called before_merge and switch to it.
git branch before_merge <commit_id>^        # Same as above, but don't switch to the created branch

无论是否"备份"分支,上述方法都将始终有效
请注意在提交id(无空格)附近添加插入符号(^)的重要性。这个命令告诉git在给定的提交id之前签出一个commit。

如果在未来,出于任何原因,您决定切换回旧库,但已经在master中积累了一些您不想丢失的更改,您可以选择rebase --onto(尽管在这种情况下不太建议重新设置基础)或revert合并本身:

git rebase --onto <commit_id>^ <commit_id> master  # Again, less advised. Better use the next line:
git revert -m1 <commit_id>

为了实现所有这些,您必须执行实际的合并。默认情况下,git merge将尝试以快进方式应用更改(除非您在master中有未包含在experiment_new_library中的更改),这不是您想要的。确保您使用以下参数合并到master:

git checkout master
git merge --no-ff experiment_new_library

最新更新