如何列出具有共同前缀的分支?

时间:2017-01-18 09:46:17

标签: git

我正在使用Git来管理我公司内部使用的某些软件的开发和发布,并且在加入该公司之前没有使用过Git,在使用它进行版本管理时仍然在学习如何使用它/最佳实践,功能开发等。

我已经达到了我的本地Git存储库现在与几个分支混乱的程度 - 我一直在创建一个新的分支来开发每个特征/修复每个引发的bug,将该分支与master合并一旦功能完成/修复了错误,并将master推送到服务器。服务器上只有一个分支master

我想清理'我的本地存储库,以便当我运行git branch或其他此类命令时,我不再使用的旧开发分支不再显示。但是仍然希望能够访问旧的分支,以防我需要恢复/签出任何旧的工作版本/如果出现问题就将它们与当前版本进行比较等等

我在SO上发现了这个问题:How can I archive git branches?,据我所知,这表明我可以清理'我的本地存储库通过归档和删除旧分支。但在澄清一些我不确定的事情之前,我有点犹豫不决:

如果,当我运行git branch时,我的存储库中有以下分支:

master
testFeature
brokenTestFeature
FixedTestFeature

我希望'存档' testFeature& brokenTestFeature分支,据我所知,我会跑:

git tag archive/testFeature testFeature
git tag archive/brokenTestFeature brokenTestFeature
git branch -d testFeature
git branch -d brokenTestFeature

执行此操作后,如果我再次运行git branch,则输出应显示:

master
FixedTestFeature

如果我想再次结帐testFeature,我可以运行:

git checkout -b testFeature archive/testFeature

然后{I}}分支会在下次运行testFeature时再次显示,其所有提交历史记录等仍然完好无损?

如果我存档了许多分支机构,我将如何显示我已存档的所有分支机构,以便在我确定需要时,我知道存档中的分支机构git branch

2 个答案:

答案 0 :(得分:0)

只需将Git标签和分支视为便利贴,因为它们本质上就是这样。它们只是贴在提交上的便利贴。唯一的区别是,如果你签出了一个特定的分支(不仅是post-it指向的提交,而且实际上是分支)并创建了一个新的提交,分支post-it会自动移动到新的提交。 / p>

因此,您在此归档过程中所做的只是在帖子后创建标签并剥离分支后的分支,以便分支不再列在分支列表中。提交不会以任何方式更改,并且您仍然可以使用完整的历史记录,因为标记仍然指向提交。要查看已归档的分支,您还可以使用git checkout archive/testFeature简单地检查该标记。只有当您想要取消归档分支时,您才必须执行git checkout -b testFeature archive/testFeature,也许您应该在使用git tag -d archive/testFeature取消归档后删除该标记。

您还可以创建使用一个命令执行归档和取消归档的Git别名,而不必记住多个命令,这样您就可以执行git archiveBranch testFeaturegit unarchiveBranch testFeaturegit listArchivedBranches

要列出已归档的分支,只需通过执行git tag -l archive/*列出带有归档前缀的代码。

这里有一个如何为动作定义别名的示例:

git config alias.archiveBranch '!archiveBranch() { [ $# -ne 1 ] && echo Exactly one argument is expected, which is the branch to archive && exit 1; git tag archive/$1 && git branch -qD $1 && echo archived branch $1; }; archiveBranch'
git config alias.unarchiveBranch '!unarchiveBranch() { [ $# -ne 1 ] && echo Exactly one argument is expected, which is the branch to unarchive && exit 1; git branch $1 archive/$1 && git tag -d archive/$1 && echo unarchived branch $1; }; unarchiveBranch'
git config alias.listArchivedBranches '!listArchivedBranches() { [ $# -gt 1 ] && echo None or one argument expected, which is the pattern to list && exit 1; git tag -l archive/${1-*}; }; listArchivedBranches'

通过这些你可以做像

这样的事情
git archiveBranch foo
git unarchiveBranch foo
git listArchivedBranches
git listArchivedBranches foo # to list an archived branch called "foo"
git listArchivedBranches 'f*' # to list all archived branches starting with "f"

答案 1 :(得分:0)

预览具有公共前缀或正则表达式的分支

git branch | grep "<pattern>"

用正则表达式替换<pattern>以匹配您的分支名称。

要删除所有以前缀Jira开头的分支,只需键入

git branch | grep "Jira"