如何在Git中关闭一个分支

64

当我知道我不再使用一个分支时,是否可以关闭或锁定它?实际上,我想关闭一个分支,但我认为在GIT中关闭一个分支是不可能的。删除呢?当我删除一个分支时,我的历史记录会发生什么?


这个回答解决了你的问题吗?如何归档 git 分支? - Henke
6个回答

80

更新的回答

正如@user3159253在此回答的评论中所述:

git会垃圾回收那些没有被命名引用(分支、标签等)直接或间接引用的提交。这就是为什么留下对一个已冻结分支的引用很重要的原因。


您可以通过对分支进行存档并打上标记,然后删除该分支来完成操作。

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

该分支将被删除,可以通过检出标签并重新创建分支来稍后获取。

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

更简单地说:

git checkout -b new_branch_name archive/<branchname>

3
你可能也想将你的标签推送到服务器上与大家分享。要这样做,只需使用 git push archive/<branchname> 或者推送所有标签 git push --tags - LNiederha

9
你可以参考git finding unmerged branches来查找已经合并或未合并的分支。
如果一个分支已经被合并到其他分支中,可以使用以下命令安全地删除它。 git branch -D 分支名

1
即使合并了一个分支,仍然有可能保留所有提交的信息非常重要......
假设你正在开发一个功能分支,并决定添加一些代码来进行复杂的计算。经过分析后,这段代码不再需要继续前进,所以它被删除了。现在分支已经合并了(分析不是其中的一部分)。
两年后,您需要获取那个分析代码来证明您在开发该功能时进行了尽职调查....但它已经消失了,您将面临诉讼/罚款,甚至会导致公司破产关闭。

0

0

0

您可以将此放置在活动的.gitconfig文件中的别名下,根据需要更改格式。我在这里插入了换行符以便于阅读。 我使用的技巧是定义一个shell函数,Git可以使用并发出多个命令,这些命令由分号分隔。

   closebranch = "!w() { echo Attempting to close local and remote branch: $1 Processing...; 
echo Checking the branch $1 out..;
 git checkout $1;
 echo Trying to create a new tag archive/$1;
 git tag archive/\"$1\";
 git push origin archive/\"$1\"; 
echo Deleting the local branch $1; 
git branch -d $1;  echo Deleting the remote branch $1;
 git push origin --delete $1;
 echo Done. To restore the closed branch later, enter: git checkout -b MyNewBranch archive/\"$1\"; }; w"

别名是一组命令,当你运行以下命令时:

git closebranch SomeBranch

  1. 检出名为SomeBranch的分支$1
  2. 创建一个名为archive/$1的新标签,这里称为“已归档标签”
  3. 将创建的标签推送到远程库(origin),请注意,我假设您的远程库名称为origin,请输入git remote -v来确认。
  4. 删除分支$1
  5. 删除远程分支$1
  6. 向开发人员解释如何稍后从存档标签中恢复该分支到新分支中。

这将有助于开发人员避免分支堆积和减少混乱,因为Git缺乏像Mercurial一样关闭分支的标准方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接