Warum wird “origin/HEAD” angezeigt, wenn “git branch -r” ausgeführt wird?

Lesezeit: 5 Minuten

Warum wird originHEAD angezeigt wenn git branch r ausgefuhrt wird
Ben Hamill

Wenn du rennst git branch -r warum die flammen tut es liste origin/HEAD? Beispielsweise gibt es auf GitHub ein Remote-Repo mit zwei Branches: master und awesome-feature. Wenn ich mache git clone Um es zu greifen und dann in mein neues Verzeichnis zu gehen und die Zweige aufzulisten, sehe ich Folgendes:

$ git branch -r
origin/HEAD
origin/master
origin/awesome-feature

Oder in welcher Reihenfolge auch immer (Alpha? Ich täusche dieses Beispiel vor, um die Identität eines unschuldigen Repos geheim zu halten). Also was ist das HEAD Unternehmen? Ist es das, was die letzte Person ist push hatte ihre HEAD darauf hingewiesen, wenn sie gedrückt? Wird das nicht immer das sein, was sie waren? pushed? HEADs umherziehen … warum kümmert es mich, was jemand hat HEAD zeigte auf eine andere Maschine?

Ich komme gerade mit der Fernverfolgung und dergleichen in den Griff, also ist dies eine anhaltende Verwirrung. Danke!

BEARBEITEN: Ich hatte den Eindruck, dass dedizierte Remote-Repos (wie GitHub, wo niemand per SSH reinkommt und an diesem Code arbeitet, sondern nur Pull oder Push usw.) keinen HEAD haben und haben sollten, weil es im Grunde gab keine Arbeitskopie. Nicht so?

  • verwandt: stackoverflow.com/questions/8839958/…

    – Leonbloy

    19. Januar 2013 um 3:22 Uhr

1646241488 531 Warum wird originHEAD angezeigt wenn git branch r ausgefuhrt wird
cdunn2001

@robinst ist richtig.

In Git können Sie auswählen, welcher Zweig standardmäßig ausgecheckt wird (dh wenn Sie klonen). Standardmäßig, origin/HEAD wird darauf hinweisen.

Auf GitHub, Sie können dies ändern in den Admin-Einstellungen für Ihr GitHub-Repository. Sie können dies auch über die Befehlszeile tun

git remote set-head origin trunk

oder ganz löschen via

git remote set-head origin -d

Beispiel. Sehen Sie sich das Drop-down-Menü „Switch Branches“ an. trunk wird überprüft, also origin/HEAD folgt trunk.

  • Ich habe eine andere Fernbedienung in be umbenannt origin und meine otherremote/HEAD -> master störte mich. Das Ausführen Ihres Befehls hat das für mich behoben.

    – Felipe Alvarez

    16. Juni 2017 um 5:48 Uhr

Der Grund, warum ein reines Repository einen HEAD haben kann, liegt darin, dass er bestimmt, welcher Zweig nach einem Klonen des Repositorys anfänglich ausgecheckt wird.

Normalerweise zeigt HEAD auf master, und das ist der Branch, der ausgecheckt wird, wenn Leute das Repository klonen. Das Setzen auf einen anderen Zweig (durch Bearbeiten von HEAD im Bare-Repository) führt dazu, dass dieser Zweig beim Klonen ausgecheckt wird.

  • Da es möglich ist, diesen Verweis zu entfernen, ohne zu drücken, origin/HEAD Ist ein lokaler Bezug korrekt? Hat das Entfernen Auswirkungen auf origin?

    – Zach Posten

    3. Januar 2016 um 3:55 Uhr

  • @zposten: Nein, genauso wie das Löschen origin/master wirkt sich nicht auf die Fernbedienung aus.

    – Robinst

    5. Januar 2016 um 8:03 Uhr

  • Das würde bedeuten, dass die Referenz nach dem Klonen nur eine nutzlose Information ist.

    – Bachau

    17. Juni 2019 um 11:14 Uhr


  • @Bachsau die Referenz wird nicht geklont.

    – Robinst

    1. Juli 2019 um 0:57 Uhr

1646241488 75 Warum wird originHEAD angezeigt wenn git branch r ausgefuhrt wird
boblu

Ich hatte den Eindruck, dass dedizierte Remote-Repos (wie GitHub, wo niemand per SSH reinkommt und an diesem Code arbeitet, sondern nur Pull oder Push usw.) keinen HEAD haben und nicht haben sollten, weil es im Grunde nicht funktionierte Kopieren. Nicht so?

Ich hatte genau den gleichen Eindruck wie du sagtest.

Und ich kann nicht einmal diesen Origin/HEAD-Remote-Tracking-Zweig löschen, der dadurch von Github geklont wurde

git branch -d -r origin/HEAD

Dies hatte keine Auswirkung.

Kann mir jemand sagen, wie ich diesen Origin/HEAD Remote-Tracking-Zweig löschen kann?

aktualisieren

Obwohl ich nicht herausgefunden habe, warum beim Klonen von Github ein Ursprung/HEAD erstellt wird, finde ich einen Weg, ihn zu löschen.

Die neue Version von git stellt bereit

git remote set-head <name> -d

um den nutzlosen HEAD-Zeiger des Remote-Tracking-Zweigs zu löschen.

Und wir können auch den dummen Standardnamen ‘origin’ ändern, indem wir verwenden

git remote rename origin <new_name>

Hoffe das kann helfen. 🙂

  • Ich habe das gleiche Problem (sogar auf GitHub) und set-head hat nicht funktioniert. Sollte ich ‘git remote set-head HEAD -d’ ausführen?

    – Joost Schuur

    6. Juli 2010 um 17:32 Uhr

  • @Joost: es ist git remote set-head origin -d

    – znq

    15. März 2011 um 12:09 Uhr

Da hast du Recht drängen zu Dedizierte Remote-Repos funktionieren viel besser, wenn sie “nackt” sind, dh wenn sie keine Arbeitsverzeichnisse haben. Die Architektur von Git ist auf Updates durch Patches bzw pull (fetch), was in einem verteilten VCS sinnvoll ist. Wie die Dokumentation irgendwo sagt, kann das Drücken auf einen Zweig, der derzeit ausgecheckt ist, dazu führen “unerwartete Ergebnisse”.

Der HEAD ist Teil der Anforderungen an ein gültiges Repository. Git-Repository-Layout sagt auszugsweise:

HEAD

A symref (see glossary) to the refs/heads/ namespace describing the currently active  
branch. It does not mean much if the repository is not associated with any working tree  
(i.e. a bare repository), but a valid git repository must have the HEAD file; some  
porcelains may use it to guess the designated "default" branch of the repository  
(usually master). It is legal if the named branch name does not (yet) exist.

Sie werden also HEAD als Teil der Branchenliste sehen, auch wenn “es nicht viel bedeutet …”

Wenn „origin“ ein entferntes Repository ist, identifiziert origin/HEAD den Standardzweig auf diesem entfernten Repository.

Beispiel:

$ git remote show
origin
$ git remote show origin
* remote origin
  Fetch URL: [email protected]:walkerh/pipe-o-matic.git
  Push  URL: [email protected]:walkerh/pipe-o-matic.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

Beachten Sie die Zeile “HEAD branch: master”. Hier teilt das Remote-Repository den Clients standardmäßig mit, welcher Zweig ausgecheckt werden soll.

1646241489 353 Warum wird originHEAD angezeigt wenn git branch r ausgefuhrt wird
Codelogik

Da ist immer ein KOPF dabei Punkte zum aktuell ausgecheckten Zweig auf dem Remote-Repo (der Master sein kann oder nicht). Sogar Remote-Repositories haben Current Branches. Normalerweise ist es Meister, und aus dem Kopf fällt mir kein Grund ein, warum man es ändern möchte, aber es kann geändert werden.

1646241489 220 Warum wird originHEAD angezeigt wenn git branch r ausgefuhrt wird
Dustin

Meine Vermutung ist, dass jemand einen Ast geschoben und ihn HEAD genannt hat:

git push origin HEAD

  • Kann ich ein paar Kommentare dazu bekommen, was daran falsch ist? Wenn Sie einen Origin/HEAD auf GitHub wollen, ist das der einzige Weg, den ich kenne, um ihn dorthin zu bekommen.

    – Dustin

    11. Dezember 2008 um 4:37 Uhr

  • Der entfernte HEAD ist eine symbolische Referenz (normalerweise zu Refs/Heads/Master). Sie ersetzen die symbolische Referenz durch die Hash-ID des Commits Ihres aktuellen Zweigs.

    – Daniel Fanjul

    11. Mai 2009 um 10:32 Uhr

  • Sollten Vermutungen nicht in Kommentaren diskutiert werden, anstatt eine ungenaue Antwort zu sein?

    – Luciano

    25. Oktober 2018 um 13:46 Uhr

914350cookie-checkWarum wird “origin/HEAD” angezeigt, wenn “git branch -r” ausgeführt wird?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy