gpt4 book ai didi

git - 如何配置 `git branch -d` 仅在 merge 到当前分支时删除分支

转载 作者:行者123 更新时间:2023-12-03 00:46:47 25 4
gpt4 key购买 nike

git branch -d someBranchName 的行为几乎是完美的,除了有时它会删除实际上没有 merge 到当前 checkout 分支的分支,只是因为它们有一个远程分支。 [呃,他们当然有一个我推送的远程分支,我不想仅仅因为他们碰巧在 origin 上有一个远程分支就删除它们。]

如何将 Git 的行为更改为仅 git branch -d merge 到当前分支的分支,或者是否有一个替代命令可以别名执行相同的操作?

最佳答案

据我所知,没有办法告诉 Git 这样做。从git分支的手册页:

-d, --delete

Delete a branch. The branch must be fully merged in its upstream branch, or in HEAD if no upstream was set with --track or --set-upstream.

解决方法是取消设置您要删除的分支的上游,尝试删除,并在需要时恢复上游。然而,手动完成这会很痛苦,所以让我们尝试自动化它。

来自this answer ,获取给定分支的上游:

upstream=$(git rev-parse --abbrev-ref <branch>@{u})

取消设置上游:

git branch --unset-upstream <branch>

之后,您可以使用普通的安全删除:

git branch -d <branch>

如果分支未被删除,则恢复上游:

git branch -u $upstream $1

将所有内容放在 中脚本(添加一些逻辑,以防分支没有上游):

#!/bin/bash

unset=0
upstream=$(git rev-parse --abbrev-ref $1@{u})
if [ $? -eq 0 ]
then
unset=1
git branch --unset-upstream $1
fi

git branch -d $1

if [ $? -ne 0 && unset ]
then
git branch -u $upstream $1
fi

或者,将其简化为别名:

[alias]
delete-maybe = "! unset=0; upstream=$(git rev-parse --abbrev-ref $1@{u} 2>/dev/null); [ $? -eq 0 ] && unset=1 && git branch --unset-upstream $1; git branch -d $1; [ $? -ne 0 ] && [ $unset -eq 1 ] && git branch -u $upstream $1; true"

您现在可以使用它来安全删除分支:

git delete-maybe mybranch

关于git - 如何配置 `git branch -d` 仅在 merge 到当前分支时删除分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39860792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com