我正在寻找将 git 分支转换为 git 标签的最佳和最安全的方法。当手动移植一个 svn 存储库时,我基本上复制了我们所有的分支,并且每个次要版本(1.1、1.2、1.3)都有一个分支,老实说,这可能不是最好的方法,但为了速度,当时我更喜欢使用分支而不是标签。我现在有分支 1.5、1.6、1.7、1.8 但是由于我们在任何给定时间只部署了一个版本的代码,我可能只需要最后一个版本作为分支,以防任何热修复需要进入那个版本已部署。所以我正在寻找将 git 分支转换为 git 标签的最佳方法。我想我有办法,但确定它有多好。
到目前为止我所做的是对于我想要转换为标签的每个分支,我已经检查以确保在那些不在 master 分支中的分支中没有提交,所以我做了:
git log 1.5 ^master
git log 1.6 ^master
git log 1.7 ^master
所有这些都没有给我任何回报,我认为这意味着这些分支中的所有提交都存在于 master 中。我这样做是因为我假设如果在那些不在 master 中的分支中有提交,那么在将分支转换为标签时我会丢失它们,因为标签只是指向一个提交而不是开发线的“指针”。看起来不错,我的假设是我只需要这样做:
git tag 1.5v 1.5
git tag 1.6v 1.6
git tag 1.7v 1.7
然后我只需要在本地删除分支并将这些更改推送到远程存储库。这是将 git 分支转换为 git 标签的最佳方式吗?
我还有一个担心是,如果有人从 1.7(没有人应该这样做)创建了一个分支,并且他们提取了删除该分支的更改,他们是否能够将这些更改合并到另一个分支(比如 master)或者那种打破他们创建的分支?这是不应该发生的情况,因为除了最后一个版本(在本例中为 1.8)之外,不应从任何分支版本创建分支,但人们并不总是正确地遵循程序,所以我想确保有一种方法如果发生这种情况来解决这个问题。