818 votes

le nettoyage de la vieille distance branches git

Voici mon workflow git.

Je travaille à partir de deux ordinateurs différents (A et B) et de stocker une commune git distant dans le répertoire dropbox.

Disons que j'ai deux branches de master et de devel. Les deux sont le suivi de leur distance homologues origin/master et d'origine/devel.

Maintenant, alors que sur Un ordinateur, j'ai supprimer la branche devel - en local et à distance - comme suit:

git push origin :heads/devel

git branch -d devel

Maintenant, si je n' git branch -a sur Un ordinateur, j'obtiens

master
origin/HEAD
origin/master

Je passe maintenant à l'ordinateur B. N' git fetch. Je peux supprimer le local de la branche devel par

git branch -d devel

Mais je ne peux pas retirer la télécommande branche devel.

git push origin :heads/devel

error: unable to push to unqualified destination: heads/proxy3d
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
fatal: The remote end hung up unexpectedly

Faire git branch -a encore les listes origine/devel dans les branches distantes.

Comment puis-je nettoyer la télécommande de l'entrée de devel de la machine B?

1433voto

Jakub Narębski Points 87537

Tout d'abord, quel est le résultat de l' git branch -a sur la machine B?
Deuxièmement, vous avez déjà supprimé les "têtes/devel' "origine", c'est pourquoi vous ne pouvez pas le supprimer à partir de B.

Essayez

git branch -r -d origin/devel

ou

git remote prune origin

ou

git fetch origin --prune

14voto

Alex Amiryan Points 704

Voici script bash qui peut le faire pour vous. C'est une version modifiée de la http://snippets.freerobby.com/post/491644841/remove-merged-branches-in-git script. Ma modification lui permet de soutenir à différents endroits éloignés.

#!/bin/bash

current_branch=$(git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
if [ "$current_branch" != "master" ]; then
  echo "WARNING: You are on branch $current_branch, NOT master."
fi
echo -e "Fetching merged branches...\n"

git remote update --prune
remote_branches=$(git branch -r --merged | grep -v '/master$' | grep -v "/$current_branch$")
local_branches=$(git branch --merged | grep -v 'master$' | grep -v "$current_branch$")
if [ -z "$remote_branches" ] && [ -z "$local_branches" ]; then
  echo "No existing branches have been merged into $current_branch."
else
  echo "This will remove the following branches:"
  if [ -n "$remote_branches" ]; then
echo "$remote_branches"
  fi
  if [ -n "$local_branches" ]; then
echo "$local_branches"
  fi
  read -p "Continue? (y/n): " -n 1 choice
  echo
  if [ "$choice" == "y" ] || [ "$choice" == "Y" ]; then
    remotes=`echo "$remote_branches" | sed 's/\(.*\)\/\(.*\)/\1/g' | sort -u`
# Remove remote branches
for remote in $remotes
do
        branches=`echo "$remote_branches" | grep "$remote/" | sed 's/\(.*\)\/\(.*\)/:\2 /g' | tr -d '\n'`
        git push $remote $branches 
done

# Remove local branches
git branch -d `git branch --merged | grep -v 'master$' | grep -v "$current_branch$" | sed 's/origin\///g' | tr -d '\n'`
  else
echo "No branches removed."
  fi
fi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X