2023-11-29 09:00:07

如何归档git分支?

我的git存储库中有一些旧的分支,它们不再处于活跃的开发状态。我想存档这些分支,这样它们在运行git branch -l -r时默认不会显示。我不想删除它们,因为我想保留历史。我该怎么做呢?

我知道可以在refs/heads之外创建一个ref。例如:refs/archive/old_branch。这样做有什么后果吗?


当前回答

下面是它的别名:

arc    = "! f() { git tag archive/$1 $1 && git branch -D $1;}; f"

这样加起来:

git config --global alias.arc '! f() { git tag archive/$1 $1 && git branch -D $1;}; f'

请记住,git已经有了archive命令,所以不能使用archive作为别名。

你还可以定义alias来查看“存档”分支的列表:

arcl   = "! f() { git tag | grep '^archive/';}; f"

关于添加别名

其他回答

杰里米的回答原则上是正确的,但恕我直言,他指定的命令不太正确。

下面是如何在不签出分支的情况下将一个分支归档到一个标签中(因此,在删除该分支之前,不必签出到另一个分支):

> git tag archive/<branchname> <branchname>
> git branch -D <branchname>

下面是如何恢复一个分支:

> git checkout -b <branchname> archive/<branchname>

我的方法是用“trash_”前缀重命名所有我不关心的分支,然后使用:

git branch | grep -v trash

(带壳键绑定)

为了保持活跃分支的颜色,我们需要:

git branch --color=always | grep --color=never --invert-match trash

我认为正确的方法是标记分支。如果你在标记了分支之后删除了它,那么你就有效地保留了这个分支,但它不会使你的分支列表变得混乱。

如果您需要返回分支,只需检查标签。它将有效地从标记中恢复分支。

归档并删除分支:

git tag archive/<branchname> <branchname>
git branch -d <branchname>

在一段时间后恢复分支:

git checkout -b <branchname> archive/<branchname>

分支的历史记录将被保留,就像您标记它时一样。

您可以将分支归档到另一个存储库中。虽然没那么优雅,但我觉得这是个可行的选择。

git push git://yourthing.com/myproject-archive-branches.git yourbranch
git branch -d yourbranch

我使用以下别名隐藏归档的分支:

[alias]
    br = branch --no-merge master # show only branches not merged into master
    bra = branch                  # show all branches

因此,git br显示正在开发的分支,git bra显示所有分支,包括“存档”的分支。