我的git存储库中有一些旧的分支,它们不再处于活跃的开发状态。我想存档这些分支,这样它们在运行git branch -l -r时默认不会显示。我不想删除它们,因为我想保留历史。我该怎么做呢?
我知道可以在refs/heads之外创建一个ref。例如:refs/archive/old_branch。这样做有什么后果吗?
我的git存储库中有一些旧的分支,它们不再处于活跃的开发状态。我想存档这些分支,这样它们在运行git branch -l -r时默认不会显示。我不想删除它们,因为我想保留历史。我该怎么做呢?
我知道可以在refs/heads之外创建一个ref。例如:refs/archive/old_branch。这样做有什么后果吗?
当前回答
您可以将分支归档到另一个存储库中。虽然没那么优雅,但我觉得这是个可行的选择。
git push git://yourthing.com/myproject-archive-branches.git yourbranch
git branch -d yourbranch
其他回答
我有时会这样归档分支:
生成补丁文件,例如format-patch <branchName> < firstthash >^..<lastHash>(使用git日志获取firstthash和lastHash) 将生成的补丁文件移动到文件服务器的目录下。 删除分支,例如git分支-D <branchName>
当你需要再次使用分支时,“应用”补丁;然而,根据目标分支的状态,应用补丁文件(参见git am)可能具有挑战性。从好的方面来看,这种方法的好处是允许分支的提交被垃圾收集,并节省了repo中的空间。
在Git中,分支只是一个指向某个提交的指针。因此,删除一个分支只会删除一个指针,即使分支从未合并,也不会删除相关的代码。因此,“归档”本地分支就像记住指针名称一样简单(提交哈希)。你可以在。/git/refs/heads目录下找到这些信息。或者,您可以简单地将分支到提交的映射复制到如下所示的文本文件中。
git branch -v > /path/to/backup/branches.txt
删除分支之后,可以使用以下命令在本地恢复它。
git branch <branch_name> <commit_hash>
您可以使用为您存档分支的脚本
archbranch
它为您创建一个带有前缀archive/的标记,然后删除分支。在使用它之前,请确保您了解它的功能=)
使用- $/your/location/of/script/archbranch [branchname] [defaultbranch]
如果希望运行脚本而不向其写入位置,则将其添加到路径中
那你可以顺便来看看
$ archbranch [branchname] [defaultbranch]
[defaultbranch]是归档完成后它将转到的分支。有一些问题与颜色编码,但除此之外,它的工作。我已经在项目中使用它很长时间了。
步骤0。检查以确保工作树是干净的,以免 失去工作:
git status
步骤1。从本地存储库的根签出分支和 然后将其标记为存档:
git checkout <branch_name> && git tag archive/<branch_name>
步骤2。上传标签到远程,并确保在另一个分支之前 继续,例如main:
git push origin --tags && git checkout main
步骤3。从本地和远程存储库中删除分支:
git branch -D <branch_name> && git push origin -d <branch_name>
在哪里您应该替换<branch_name>与分支的名称 要存档,并将原点与远程存储库的名称联系起来 如果不是原点。
评论:
在第1步之前和之后,你可能想要运行git标记来注意 添加标签。 在第三步之前和之后,你可能想要观看 https://github.com/ < github-username > / < github-repository-name > /分支 和/或运行git branch -a来注意这个分支是如何被删除的。 恢复一个分支:
git checkout -b <branch_name> archive/<branch_name>
紧随其后的是
git push --set-upstream origin <branch_name>
引用: https://gist.github.com/zkiraly/c378a1a43d8be9c9a8f9 https://dev.to/clsource/archiving-git-branches-3k70
我的方法是用“trash_”前缀重命名所有我不关心的分支,然后使用:
git branch | grep -v trash
(带壳键绑定)
为了保持活跃分支的颜色,我们需要:
git branch --color=always | grep --color=never --invert-match trash