Warum ist "git branch" in neuen Repositories still?

Wenn Sie ein neues Repository erstellen und git branch ausführen, wird es automatisch beendet. Beispielsweise:

$ mkdir /tmp/foo; cd /tmp/foo; git init
Initialized empty Git repository in /tmp/foo/.git/

$ git branch

Warum liefert der Befehl keine Ausgabe oder zeigt den Master-Zweig an?

2
hinzugefügt bearbeitet
Ansichten: 1

3 Antworten

TL; DR

Es sind noch keine Zweigstellen vorhanden.

Ausführliche Erklärung

Ein Git-Repository hat keine Zweige, bis Sie Ihren ersten Commit durchführen. Ein neu initialisiertes Repository setzt HEAD auf refs/heads/master, aber refs/heads/master existiert nicht oder enthält einen Commit-Zeiger, bis das erste Commit durchgeführt wurde.

Während eines Commits derotiert Git den symbolischen ref-HEAD, um den Kopf des aktuellen Zweigs zu finden, und aktualisiert diesen Kopf dann mit dem von git-commit-tree gelieferten Commit-Hash.

Das Endergebnis ist, dass git branch nichts in einem neuen Repository zu melden hat. Wenn keine Zweigköpfe vorhanden sind, wird es einfach still mit einem Beendigungsstatus von Null beendet.

Siehe auch

  • Git-Zweig (1)
  • git-commit-tree (1)
  • git-symbolic-ref (1).
  • git-update-ref (1)
  • gitcore-tutorial (7)
8
hinzugefügt
Schöne Erklärung, was im Hintergrund passiert. Dies hilft den Benutzern zu verstehen, wie git funktioniert.
hinzugefügt der Autor Ikke, Quelle

Beachten Sie, dass ein Zweig einfach ein Zeiger auf ein Commit ist.
Da ein leerer Repo (mit seinem leeren Baum ) keinen Commit hat, gibt es keine Verzweigung .

Ein erster Commit erzeugt einen Zweig mit dem Namen " master ", weil HEAD auf refs/heads/master verweist.
Wenn Sie einen ersten Commit für einen anderen Zweig erstellen möchten (als master ), müssen Sie zuerst den symbolischen Verweis von HEAD ändern (wie in dieser Thread ):

git symbolic-ref HEAD refs/heads/non-master 

Und dann mach dein erstes Commit.

2
hinzugefügt

Ja, Sie müssen zuerst durchführen

$ git add .
$ git commit -m 'first commit'

Befehle.

0
hinzugefügt