如何偏离标签的git分支?

时间:2019-07-18 05:40:51

标签: git branching-and-merging bitbucket-server

我想将Git标签之后的所有提交都转换为分支,以便从该标签重新开始主文档,然后再从该分支发出拉取请求。

我想从标签重新开始,并释放一些机会,直到当前变化稳定为止。 这是某种可以解决问题的rebase命令吗? 任何具体的例子将不胜感激

我可以从标记中签出,也可以从中签出,但是恰恰相反,这确实是有道理的:我们应该从母版中分支而不是提交。

Thx

3 个答案:

答案 0 :(得分:1)

据我了解,您的情况如下:

  1. 您的一项提交被标记为mytag
  2. master之后,您在mytag中有几个命令。所有这些提交都已推送到远程。

如果我对您的理解正确,那么您需要做几件事:

  1. 您不想在mytag(即您的本地计算机)和master(即您的远程存储库)中都看到origin/master之后的提交。
  2. 您想将mytag之后的所有提交保留在单独的分支(即newbranch)中。

如果我正确描述了您想要的内容,请执行以下命令:

# Switch to latest commit in master:
$git checkout master
# Create new branch:
$git checkout -b newbranch
# Switch back to master:
$git checkout master
# Reset master to "mytag":
$git reset --hard mytag
# Apply changes in master to origin/master:
$git push -f

请注意,最后一个命令(git push)是通过“强制”选项(-f)执行的。该选项允许删除远程中的提交。我强烈建议您阅读有关此选项的git文档。

注意:带有{force}选项的git push仅在您是项目中的单个开发人员时应用。如果您的项目中有多个贡献者,我强烈劝阻您不申请git push -f,因为它可能会破坏您同事的本地存储库中的提交历史记录。如果有多个贡献者,那么将其保持现状可能是最好的解决方案。

答案 1 :(得分:0)

您可以按照以下步骤从指定的标签创建分支。

git branch new_branch tag_name

git log将显示如下。

commit 5ad3849a9de65d9180c1242c7148cc10148xxxxx (HEAD -> feat)
commit ae4b6bb01a74d0f2d8a7c53fe9781186bb2xxxxx (tag: v1, new_branch)

答案 2 :(得分:0)

要为所有标签创建分支,例如从v1.0branch_v1.0

git push . refs/tags/*:refs/heads/branch_*

git for-each-ref refs/tags --format="%(refname:lstrip=2)" | while read tag;do
    git branch branch_$tag;
done