如何关闭 git 中的分支

how to close a branch in git

当我知道我不会再使用某个分支时,是否可以关闭或锁定它?其实我想关闭一个分支,但我认为用 GIT 关闭一个分支是不可能的。那删除呢。当我删除一个分支时,我的历史会怎样?

更新答案

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

git garbage-collects commits which aren't referenced, directly or indirectly, by a named reference (branch, tag, etc). That is why it is important to leave a reference to a freezed branch.


您可以通过归档来标记分支的尖端,然后删除该分支。

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>

你可以参考git finding unmerged branches找到那些已经合并或没有合并的分支。

如果一个分支已经合并到其他分支,可以使用以下命令安全地删除它。

git branch -D branch_name

如果你想完全删除一个分支,你可以在你所有的存储库(通常是本地和远程)中删除它。 git 将在下次垃圾收集时清理它。

有关说明,请参阅 How do I delete a Git branch both locally and remotely?

您可以将它放在活动的 .gitconfig 文件中的别名下,更改格式,因为我在此处的分号后插入换行符以提高可读性。 我在这里使用的技巧是定义一个 shell 函数,Git 可以使用该函数并针对 Git 发出多个命令,用分号分隔。

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

别名是一组命令,当您 运行 时: git closebranch SomeBranch

  1. 查看名为 SomeBranch 的分支 $1
  2. 新建一个名为archive/$1的标签作为标签,这里叫"archived tag"
  3. Push to origin the created tag(注意,我这里假设你的遥控器叫做origin,输入 git remote -v 检查是否是这样。
  4. 删除分支 $1
  5. 删除远程分支$1
  6. 向开发人员解释稍后如何将分支从归档标记恢复到新分支。

这将有望帮助开发人员避免分支堆积并避免混乱,因为 Git 缺乏关闭分支的标准方法,例如 Mercurial got。

除了上面的评论外,还应该提到git流。 如果你已经打开了更新的分支,你可以简单地使用以下命令将其删除并合并到 develop 分支中:

分支:“feature-bootstrap5”

$ git flow feature finish feature-bootstrap5

更多信息: https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow https://danielkummer.github.io/git-flow-cheatsheet/index.html

即使在合并分支之后,仍然存在保留 所有 提交的信息可能很关键的情况...

考虑到您正在开发一个功能分支,并决定在开发过程中添加一些代码来进行复杂的计算。分析后不再需要此代码以继续前进,因此删除了该代码。现在分支已合并(分析不是其中的一部分)。

2 年后,您需要获取该分析代码以证明您在功能开发过程中尽职调查....但它已经消失了,您是 su ed/fined,没有破产,你的生意就关门了。