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

时间:2014-01-03 18:48:29

标签: git

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

git checkout -b experiment_new_library

如果那时候,我认为这个工作正常,我将它合并到master中,为了能够以某种方式“保存”旧的主分支与旧的Image库,这将是什么好方法?如果你想回滚它,你应该如何保存该状态?

2 个答案:

答案 0 :(得分:0)

您可以随时返回旧版提交,这是VCS的目的。如果要命名或“标记”特定提交(状态),以便稍后可以轻松找到它,请使用git tag

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

答案 1 :(得分:0)

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

即可
git branch master_backup master

您可以将master_backup替换为您喜欢的任何分支名称,只要它尚不存在 如果您希望将其存储在origin(或任何其他远程服务器)上,您可以轻松实现:

git push origin master:master_backup

这将在远程origin中创建一个名为master_backup的新分支,其中包含您当地master的当前内容。随意根据需要更改名称。

话虽如此,你并不需要备份分支,因为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在给定的commit id之前签出one-commit。

如果将来由于任何原因,您决定切换回旧库,但已经在master累积了一些您不想丢失的更改,则可以rebase --onto (虽然在这种情况下不太建议使用rebase)或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