重命名Git分支文件夹
我有一个Git存储库,其远程分支结构如下:重命名Git分支文件夹,git,version-control,Git,Version Control,我有一个Git存储库,其远程分支结构如下: bugfix001 bugfix002 feature feature001 feature002 feature003 master task task001 task002 git branch --list "feature/*" 其中,“功能”和“任务”是分支结构中的文件夹,“功能001”、“功能002”分支位于父“功能”分支文件夹下 我的问题是-是否可以重命名“feature”父文件夹并
bugfix001
bugfix002
feature
feature001
feature002
feature003
master
task
task001
task002
git branch --list "feature/*"
其中,“功能”和“任务”是分支结构中的文件夹,“功能001”、“功能002”分支位于父“功能”分支文件夹下
我的问题是-是否可以重命名“feature”父文件夹并保留其下的所有分支。所以我可以把它改名为“仓鼠”,结构看起来像这样
hamster
feature001
feature002
feature003
我要说的是,我不是指本地文件结构,这是远程服务器上的分支结构。要在“功能”文件夹下添加分支,我将使用:
git checkout -b feature/feature004
我意识到我可以单独重命名每个分支并推送到远程,但是我可以重命名“feature”父文件夹吗?这会导致分支跟随新名称吗?在git中,您可以使用斜杠(
/
)或不使用斜杠,以您想要的方式命名分支。这些斜杠不表示文件夹分隔。因此,如果您想重命名所有以“feature”开头的分支,您必须手动为每个分支重命名
使用相同的前缀可以帮助您列出分支的某些子集;像这样:
bugfix001
bugfix002
feature
feature001
feature002
feature003
master
task
task001
task002
git branch --list "feature/*"
不过也没什么大不了的。在git中,您可以使用斜杠(
/
)或不使用斜杠,以您想要的方式命名分支。这些斜杠不表示文件夹分隔。因此,如果您想重命名所有以“feature”开头的分支,您必须手动为每个分支重命名
使用相同的前缀可以帮助您列出分支的某些子集;像这样:
bugfix001
bugfix002
feature
feature001
feature002
feature003
master
task
task001
task002
git branch --list "feature/*"
但也没什么比这更重要的了。git中没有“分支文件夹”这样的东西
您只有命名的分支,并且您正在使用的名称恰好包含一个斜杠,它提醒人们文件夹结构;但它也可能是其他东西(例如,@
)
总结:您必须重命名每个分支,并推送新的分支名称(并删除旧的分支名称)
但这应该足够简单:
remote=origin
for branch in $(git branch --list "feature/*")
do
newbranch="hamster/${branch#feature/}"
# locally create new branch based on old one
git checkout "${branch}"
git checkout -b "${newbranch}"
# push the new branch to the remote
git push --set-upstream "${remote}" "${newbranch}"
# delete old branch remotely and locally
git push "${remote}" ":${branch}"
git branch -d "${branch}"
done
git中没有“分支文件夹”这样的东西
您只有命名的分支,并且您正在使用的名称恰好包含一个斜杠,它提醒人们文件夹结构;但它也可能是其他东西(例如,@
)
总结:您必须重命名每个分支,并推送新的分支名称(并删除旧的分支名称)
但这应该足够简单:
remote=origin
for branch in $(git branch --list "feature/*")
do
newbranch="hamster/${branch#feature/}"
# locally create new branch based on old one
git checkout "${branch}"
git checkout -b "${newbranch}"
# push the new branch to the remote
git push --set-upstream "${remote}" "${newbranch}"
# delete old branch remotely and locally
git push "${remote}" ":${branch}"
git branch -d "${branch}"
done
正如其他人所说,Git中没有文件夹概念,这些只是名称。您唯一的选择是逐个重命名它们。脚本可以帮助完成此操作-以下是重命名本地分支的示例:
for i in $(git branch --list 'feature/*') ; do
echo "$i"
# Cut off the first part
newbranch=new/$(basename "$i")
# Rename the existing branch
git branch -m "$i" "$newbranch"
# Push the new branche
git push origin "$newbranch"
# Delete the old branch from the remote
git push origin :"$newbranch"
done
这将把所有匹配“feature/”的分支重命名为“new/”
任何从该回购中退出的人都必须为重命名的分支机构设置跟踪,因为以前的分支机构将不再存在。正如其他人所发布的,Git中没有文件夹概念,这些只是名称。您唯一的选择是逐个重命名它们。脚本可以帮助完成此操作-以下是重命名本地分支的示例:
for i in $(git branch --list 'feature/*') ; do
echo "$i"
# Cut off the first part
newbranch=new/$(basename "$i")
# Rename the existing branch
git branch -m "$i" "$newbranch"
# Push the new branche
git push origin "$newbranch"
# Delete the old branch from the remote
git push origin :"$newbranch"
done
这将把所有匹配“feature/”的分支重命名为“new/”
从该回购中提取的任何人都必须为重命名的分支机构设置跟踪,因为以前的分支机构将不再存在。当您在名称中使用
/
命名分支机构时,将在参考/heads
中创建一个目录。例如,名为feature/feature001
的分支创建名为refs/heads/feature/
的目录,其中包含一个文件feature001
。如果重命名功能
目录,实际上就是重命名以功能
开头的每个分支(对压缩引用
中的任何内容进行模化)。这不是重命名分支的推荐方法,但确实有效。您需要编辑配置文件以重新连接指定跟踪分支的任何分支。除此之外,再次忽略packed refs
中可能存在的任何内容,您可以按要求执行操作。当您在名称中使用/
命名分支时,将在refs/heads
中创建一个目录。例如,名为feature/feature001
的分支创建名为refs/heads/feature/
的目录,其中包含一个文件feature001
。如果重命名功能
目录,实际上就是重命名以功能
开头的每个分支(对压缩引用
中的任何内容进行模化)。这不是重命名分支的推荐方法,但确实有效。您需要编辑配置文件以重新连接指定跟踪分支的任何分支。除此之外,再次忽略压缩引用中可能存在的任何内容,您可以按自己的要求执行操作。您最好使用shell脚本一次重命名一个分支。您最好一次重命名一个分支,使用shell脚本。使用basename
剥离类路径组件的好技巧;如果你有多个斜杠的标签,它可能不会达到你所期望的效果:/feature/gui/foo
和feature/network/foo
都将被重命名为new/foo
,这是真的-它只会保留最后一部分完好无损;如果你有多个斜杠的标签,它可能不会达到你期望的效果:/feature/gui/foo
和feature/network/foo
都将被重命名为new/foo
,这是真的-它只会保留最后一部分不变。这很有趣,但听起来很可怕。这很有趣,但听起来很可怕