我想提交并关闭其分支,而不将其从历史记录中删除。
使用 mercurial 我会commit --close-branch
,然后update
到前一个,然后继续工作。与 git ......我很困惑。
在 Git 中没有完全等同于关闭分支的方法,因为 Git 分支比 Mercurial 中的更轻量级。他们的 Mercurial 等价物是书签多于分支。
如果我理解正确,在 Mercurial 中关闭一个分支大致会使它从分支列表中消失,因此您可以通过归档它来实现相同的目的。通常的做法是将其提示标记为存档,然后将其删除:
git tag archive/<branchname> <branchname>
git branch -d <branchname>
git checkout master
分支将被删除,稍后可以通过签出标签并重新创建分支来检索:
git checkout archive/<branchname>
git checkout -b new_branch_name
我创建了一个 powershell 脚本来自动化这个过程。此脚本存档 3 个月或更长时间的分支。您可以更改正则表达式(第 11 行)以匹配您的存档策略。
#Get all branches on remote and place in array. Format of strings in array is for example "3 months ago|origin/branch-name"
$branches = git branch -r --sort=-committerdate --format="%(committerdate:relative)|%(refname:short)|%(refname:lstrip=3)"
#Loop through all branches
ForEach ($branch in $branches)
{
#split the branch between last commit time and branch name
$split = $branch.Split("|")
try
{
#check if the last commit date is 4 months or more
if($split[0] -match "((^([4-9]|10|11|12) month)|year)")
{
$splitBranch = $split[1].Split("/")
#tag the branch
git tag archive/$split[2] $split[1]
#delete the branch
git push --delete $splitBranch[0] $split[2]
#add the archived branch name to a text file
Add-Content .\archived.txt $split[1]
}
}
catch
{
#log any branches that failed
Add-Content .\archiveFailures.txt $split[1]
}
}
#push all newly created tags
git push --tags
#to restore archived branch
#git checkout -b <branchname> archive/<branchname>