2013-05-03 5 views
7

Ich habe eine Gabel eines Git Repo auf BitBucket (nennen wir es) erstellt. Jetzt hat das Upstream-Repository (nennen wir es upstream_origin) zahlreiche Zweige in seinem Master zusammengeführt und gelöscht. So läuftBeschneiden Zweige, die in stromaufwärts Git Repo gelöscht wurden, aber immer noch in meiner Gabelung

git fetch --prune upstream_origin 

gelöscht viele remote/upstream_origin/ Zweige, aber jetzt die gleichen Zweige existieren noch im remote/fork_origin/ Namespace.

Gibt es einen Standard-Git-Befehl, um damit umzugehen? Ich möchte mich von komplexen Bash-Skripten fernhalten, die Massenlöschungen in den Remote-Repos durchführen.

UPDATE:

Wie bereits angedeutet, habe ich versucht, den Befehl Remote-Prune zu verwenden:

git remote prune fork_origin 

macht jedoch keine Wirkung hatte. Bei der weiteren Untersuchung, das scheint für ‚abgestanden‘ Zweige nur zu arbeiten, aber wenn ich laufe:

git remote show fork_origin 

es zeigt, dass alle Zweige noch ‚verfolgt‘ sind. Es macht also Sinn, dass der Befehl git remote prune nichts zu löschen hatte. Gibt es eine Möglichkeit, den Remote-Repo (fork_origin) zu zwingen, seine Zweigstatus relativ zu upstream_origin zu aktualisieren?

+0

Haben Sie das jemals herausgefunden? Ich laufe auf das gleiche Problem – BigBrownBear00

Antwort

1

Wenn Sie diesen Befehl, um die Zweige auf der Fernbedienung Gebrauch zu entfernen:

git remote prune fork_origin 

Aber vorher, werfen Sie einen Blick auf diesen Thread und sehen, was schief gehen kann: git remote prune – didn't show as many pruned branches as I expected

+0

Ich fügte ein Update zu der Frage hinzu, was dieser Befehl tat. Dies sind auch Zweige, die keinen lokalen Zweig haben, der sie verfolgt. Daher glaube ich nicht, dass die Probleme aus dem anderen Thread auf meine Situation zutreffen. –

0

Es nicht ist ein einzelner Git Befehl, aber Sie müssten;

  • holen fork_origin
  • jede remotes/fork_origin/branch identifizieren, die nicht mehr in remotes/upstream_origin vorhanden ist (wegen Ihrer git fetch --prune upstream_origin)
  • git push --delete thoseBranches

Dies ist ein bisschen ähnlich ist "Delete multiple remote branches in git".

0

Für Linux- und Mac-Benutzer löschte dieser Befehl alle Zweige aus meiner Arbeit, die im Upstream gelöscht wurden.

git branch -a | grep origin | awk -F \/ '{print $NF}' > _my_branches.txt; git branch -a | grep upstream | awk -F \/ '{print $NF}' > _upstream_branches.txt; for deleted_branch_name in `comm -23 _my_branches.txt _upstream_branches.txt`; do git push origin :$deleted_branch_name; done 

Wenn Sie es vorziehen Schritte statt einem langen Befehl haben:

# Find the branches in my fork 
git branch -a | grep origin | awk -F \/ '{print $NF}' > _my_branches.txt; 
# Find the branches still in upstream 
git branch -a | grep upstream | awk -F \/ '{print $NF}' > _upstream_branches.txt; 
# See only the ones that are still in my fork with the comm command 
# And only for those branches issue a git command to prunbe them from my fork. 
for deleted_branch_name in `comm -23 _my_branches.txt _upstream_branches.txt`; do git push origin :$deleted_branch_name; done