2
假设我单独工作,并且只使用遥控器作为代码备份解决方案。有时我可能会删除当地分行。删除本地不存在的远程分支
我知道我可以用git push origin --delete mybranch
删除远程的特定分支,但是有没有办法删除本地不存在的所有远程分支,而无需手动检查本地不存在的分支?
假设我单独工作,并且只使用遥控器作为代码备份解决方案。有时我可能会删除当地分行。删除本地不存在的远程分支
我知道我可以用git push origin --delete mybranch
删除远程的特定分支,但是有没有办法删除本地不存在的所有远程分支,而无需手动检查本地不存在的分支?
有时脱机工作时,我合并分支,然后删除旧的(合并)分支。
最好是这样做网上,你可以用push --delete
, as in this answer跟进:
git branch -r --merged | grep -v master | sed 's/origin\///' | xargs -n 1 git push --delete origin
但既然你本地删除你的分支(离线),你需要的时候在网上,到fetch --prune
的来自GitHub的远程分支,检查他们的本地对应方是否存在,否则push --delete
。
使用git for-each-ref
with the refname:lstrip=3
format为了列出这些远程分支机构的短名称:
git for-each-ref --format='%(refname:lstrip=3)' refs/remotes/origin
您可以检查是否有local branch does exists与git show-ref --quiet
if git show-ref --quiet refs/heads/develop; then
echo develop branch exists
fi
所以,你可以轻松地将二者结合起来。
git fetch --prune
for branch in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes/origin); do
if ! git show-ref --quiet refs/heads/${branch}; then
echo "delete remote branch '${branch}'"
git push origin --delete ${branch}
fi
done
只要写一个脚本来做到这一点。使用'git for-each-ref'(以'git fetch --prune'开头来更新你的Git的远程跟踪分支)。 – torek
@torek是正确的,这可能是最好的方法,但是你激发了我的兴趣,因为这是一般惯例的极端相反,你的用例是什么,你不想保留代码? – LightBender
@LightBender我通常会进行本地提交,然后将所有分支推送到远程。有时在离线工作时,我合并分支,然后删除旧的(合并的)分支。但是,旧的(合并的)分支仍然存在于遥控器上。我正在寻找保持本地和远程同步这种工作流程的方法。 – Flux