当我知道我不再使用分支时,是否可以关闭或锁定它?实际上我想关闭一个分支,但我认为不可能用 GIT 关闭一个分支。那删除呢。当我删除一个分支时,我的历史会发生什么?
6 回答
更新的答案
正如@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>
即使在合并分支之后,仍然存在保留所有提交的信息可能很关键的情况......
假设您正在开发一个功能分支,并决定添加一些代码来进行复杂的计算作为开发的一部分。分析后,不再需要此代码继续前进,因此删除了该代码。现在分支被合并(分析不是它的一部分)。
2 年后,您需要获取该分析代码以证明您在开发该功能期间进行了尽职调查......但它已经消失了,您被起诉/罚款,而不是破产您的业务关闭。
如果您想完全删除一个分支,您可以在所有存储库(通常是本地和远程)中删除它。git 会在下次垃圾收集时清理它。
请参阅如何在本地和远程删除 Git 分支?获取说明。
您可以将其放在活动 .gitconfig 文件中的别名下,更改格式,因为我在分号后插入换行符以便在此处阅读。我在这里使用的技巧是定义一个 shell 函数,Git 可以使用该函数并对 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
- 查看名为 SomeBranch 的分支 $1
- 创建一个名为archive/$1的新标签作为标签,这里称为“归档标签”
- Push to origin 创建的标签(请注意,我在这里假设您的遥控器称为 origin,键入 git remote -v 以检查是否是这样。
- 删除分支 $1
- 删除远程分支 $1
- 向开发人员解释如何稍后将分支从归档标记恢复到新分支中。
这将有望帮助开发人员避免分支堆积并避免混乱,因为 Git 缺乏关闭分支的标准方法,例如 Mercurial got。
除了上面的注释,还应该提到git flow 。如果您已经打开了一个分支进行更新,您可以使用以下命令将其删除并将其合并到开发分支中:
分支:“功能引导5”
$ 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