In der Regel werden Feature-, Hotfix- und Release-Branches nur lokal erzeugt und nicht auf einen Remote-Server gepushed, da es jedoch hin und wieder Mal vorkommen kann (warum auch immer), sollte man einige Fall-Stricke beachten.

Die Befehle

Lokaler Branch loeschen, egal in welchem Zustand er sich befindet

Solange man sich nicht im zu loeschenden Branch befindet, kann dieser, unabhaengig davon in welchem Zustand er sich befindet, geloescht werden. Dabei gehen alle nicht migrierten Aenderungen verloren.

git branch -D hotfix

Lokaler Branch loeschen, nur wenn dieser vollstaendig migriert wurde

Um keine Aenderungen zu verlieren, sollte man besser -d verwenden, da dieses abbricht, wenn noch nicht alle Aenderungen in einen anderen Branch migiriert wurden. Ebenso warnt es, wenn die Aenderungen zwar in einen anderen Branch migriert wurden, diese jedoch noch nicht in HEAD sind.
Dabei sollte bedacht werden, dass wenn man die Aenderungen in einen Remote-Branch migriert, dieser danach ohne Warnung geloescht werden kann.

git branch -d hotfix

Remote-Branch loeschen

git push origin --delete hotfix

Beispiel

Zunaechst legen wir uns einen lokalen Branch an, pushen den auf den Remote-Server und legen eine Beispiel-Datei an:

$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
$ git checkout -b hotfix master
Switched to a new branch 'hotfix'
$ git push -u origin hotfix
Total 0 (delta 0), reused 0 (delta 0)
To venus:repos/geekblog.git
 * [new branch]      hotfix -> hotfix
Branch hotfix set up to track remote branch hotfix from origin.
$ touch test.txt
$ git add test.txt
$ git commit -m "added test file"
[hotfix 7fa2a93] added test file
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.txt
$ git branch -a
  develop
* hotfix
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/hotfix
  remotes/origin/master
$ git status
On branch hotfix
Your branch is ahead of 'origin/hotfix' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working directory clean
$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

Wenn wir nun versuchen diesen Branch zu loeschen, erhalten wir eine Fehlermeldung:

$ git branch -d hotfix
error: The branch 'hotfix' is not fully merged.
If you are sure you want to delete it, run 'git branch -D hotfix'.

Mit -D koennte man nun den Branch loeschen und wuerde den Remote-Branch uebrig lassen.
Den Remote-Branch hingegen kann man auch ohne weiteres bereits jetzt loeschen, was jedoch keine Auswirkung auf die Moeglichkeit hat, den lokalen Branch zu loeschen:

$ git push origin --delete hotfix
To venus:repos/geekblog.git
 - [deleted]         hotfix
$ git branch -d hotfix
error: The branch 'hotfix' is not fully merged.
If you are sure you want to delete it, run 'git branch -D hotfix'.

Wenn der lokale Branch jedoch komplett in einen anderen Branch migriert wird, ohne jedoch in HEAD migriert zu sein, laesst er sich loeschen, man erhaelt jedoch eine Warnung:

$ git push -u origin hotfix
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 263 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To venus:repos/geekblog.git
 * [new branch]      hotfix -> hotfix
Branch hotfix set up to track remote branch hotfix from origin.
$ git checkout hotfix
Switched to branch 'hotfix'
Your branch is up-to-date with 'origin/hotfix'.
$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
$ git branch -d hotfix
warning: deleting branch 'hotfix' that has been merged to
         'refs/remotes/origin/hotfix', but not yet merged to HEAD.
Deleted branch hotfix (was 7fa2a93).
$ git branch -a
  develop
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/hotfix
  remotes/origin/master

Leider stoert sich der Remote-Branch nun nicht mehr daran, dass er nicht irgendwo hinmigriert wurde:

$ git push origin --delete hotfix
To venus:repos/geekblog.git
 - [deleted]         hotfix
$ git branch -a
  develop
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/master


Christian Prehl | 4. September 2014 | Tags: git tipps&tricks