fatal: schlechte Standardrevision 'HEAD'

72

Ich verwende GIT als mein Quellcodeverwaltungssystem. Wir haben es auf einer unserer Linux-Boxen installiert. Tortoise GIT ist mein Windows-Client.

Heute Morgen habe ich einige Änderungen eingecheckt und den Code markiert. Ich habe dann mein lokales Repository in das Remote-Repository verschoben.

Wenn ich in mein Repository auf der Unix-Box gehe und tippe, git logerhalte ich:

fatal: bad default revision 'HEAD'

Aber wenn ich show logmeinen Windows- tortoiseGitClient verwende, wird der Verlauf wie folgt angezeigt ...

---
SHA-1: f879573ba3d8e62089b8c673257c928779f71692

Initial drop of code

---
master origin/master oms-phase4-v1.0.0
SHA-1: 56176dbe45e6175b18c9f44533828806c63142ab

OMS Phase 4 - Added OMS Cust. Order No. to EDI Purchase Order Header screens

Tag Info

object 56176dbe45e6175b18c9f44533828806c63142ab
type commit
tag oms-phase4-v1.0.0
tagger Richard Riviere <[email protected]> 1364338495 +1100

---
SHA-1: 0000000000000000000000000000000000000000

Working dir changes
0 files changed

---

Der Code wurde definitiv in das Remote-Repository verschoben. Ich konnte dies überprüfen, indem ich das Repository in ein anderes Verzeichnis klonte.

Weiß jemand, warum ich die erhalte fatal: bad default revision 'HEAD'?

ps Es ist ein nacktes Repository, aber ich habe andere nackte Repositorys erstellt, bei denen dieses Problem nicht aufgetreten ist.

Richie
quelle
Hast du eine Git-Fernbedienung?
pktangyue
Möglicherweise verwandt: Git Log und Show auf einem nackten Repo .
Ich habe diesen Fehler einmal erhalten, als ich vergessen habe, zuerst zum Repo zu navigieren.
Jpaji Rajnish
1
Eine Notiz für andere, die auf diese Frage stoßen, nachdem sie etwas Dummes getan haben, wie ich. Ich habe viel Zeit verschwendet, nachdem ich einen neuen Klon eines neuen Repositorys erstellt hatte. Ich habe den Befehl git log in dem Verzeichnis ausgeführt, in dem ich den Klon erstellt habe. Eigentlich hätte ich in das Verzeichnis gehen sollen, das dort nach dem Klonen erschien.
Sandeepan Nath

Antworten:

19

Ihr Repo gehört Ihnen. Was darin vor sich geht, liegt ganz bei Ihnen, bis Sie pushen oder (erlauben), zu holen oder zu klonen. Wenn Sie Ihr Windows-Repo gelöscht haben - dieser Ordner stellte Ihr lokales Repo nicht dar, es war Ihr tatsächliches lokales Repo. Sie haben alles gelöscht, was darin ausgeführt wurde und nie verschoben, abgerufen oder geklont wurde.

edit: Ah, okay, ich glaube ich sehe was hier los ist: du bist auf dein Linux Repo gestoßen, aber es ist nicht nackt und du hast nie daran gearbeitet.

Statt zu git logtun git log --all. Oder git checkoutsome-branch-name.

Versuchen Sie dann, das Repo lokal auf Ihrer Linux-Box zu klonen. Ich wette, es funktioniert. Was benutzt du, um dein Repo unter Linux zu bedienen? Versuchen Sie, cd'ing in sein .git-Verzeichnis und git daemon --base-path=. --export-all, wenn das nur dort sitzt, dann gehen Sie zu Ihrer Windows-Box und versuchen Sie git clone git://your.linux.box.ip, wenn der Dämon sich beschwert, dass er nicht binden kann, fügen Sie --port=54345dem Daemon-Aufruf und :54345der Klon-URL hinzu.

jthill
quelle
Entschuldigung, ich habe vergessen zu erwähnen, dass ich einen Push zum Remote-Repository durchgeführt habe. Ich weiß, dass der Push erfolgreich war, weil ich die Änderungen in GitWeb sehen kann. Daher denke ich nicht, dass das, was Sie oben gesagt haben, richtig ist.
Richie
Basierend auf dem vorherigen Kommentar gibt es definitiv Code in meinem Remote-Repo. aber aus irgendeinem Grund lässt Git mich nicht klonen und gibt mir stattdessen diesen Fehler. Klingt das richtig? Wie kann ich es reparieren?
Richie
Freut mich zu hören, dass du geschoben hast. Da es nicht zu viele Möglichkeiten gab, habe ich Ihre git logVerhaltenssymptome reproduziert, indem ich in ein git initEd Repo geschoben und versucht habe, das Protokoll auszuführen.
Bis zum
Was auch immer passiert ist, es sieht so aus, als hätte ich mein Repository beschädigt. Ich habe eine Anleitung zum Wiederherstellen meines Repositorys befolgt ( git-scm.com/book/en/Git-Internals-Maintenance-and-Data-Recovery ). Viele der aufgelisteten Befehle funktionieren jedoch nicht für mich und führen nur zu Fehlern. Ich denke, es könnte schneller sein, einfach wieder mit diesem Repository zu beginnen. Es ist lustig, GitWeb hat keine Probleme. Es listet immer noch den Code usw. Ich frage mich warum
Richie
Also habe ich gestern von vorne angefangen. Ich habe meinen Code erneut eingecheckt und einige Änderungen markiert. Ich werde immer noch fatal: schlechte Standardrevision 'HEAD', wenn ich versuche, "Git Log" von Unix auszugeben. Aber wenn ich tortoiseGit in Windows verwende und ein "Show-Protokoll" mache, sieht das Protokoll gut aus und zeigt meinen gesamten Verlauf. Ich bin sehr verwirrt über diesen Fehler. Irgendwelche Ideen? Ich werde meine Frage ändern, um zu reflektieren, was ich gerade versucht habe
Richie
37

Führen Sie einfach ein erstes Commit durch und der Fehler wird behoben:

git commit -m "initial commit"
JRomio
quelle
Danke, es hat mir wirklich geholfen
Zohra Khan
1
Vielen Dank für Ihre gute Antwort (-: Es passt zum Thema und war eine einfache Lösung für mein Problem nach dem Erstellen eines Repositorys.
Beauty
Hat für mich gearbeitet. Der Fehler, der dazu geführt hat, scheint die Notwendigkeit gewesen zu sein, git config --global user.email und git config --global user.name
chribonn
35

Dies passiert mir, wenn der Zweig, in dem ich arbeite, aus dem Repository gelöscht wird, der Arbeitsbereich, in dem ich mich befinde, jedoch nicht aktualisiert wird. (Wir haben ein Tool, mit dem Sie mithilfe von Simlinks mehrere Git- "Arbeitsbereiche" aus demselben Repository erstellen können.)

Wenn git branchkein Zweig als aktuell markiert ist, versuchen Sie es

git reset --hard <<some branch>>

Ich habe eine Reihe von Ansätzen ausprobiert, bis ich diesen herausgefunden habe.

Alice Purcell
quelle
1
Das hat es gerade für mich getan :)
Victor Martins
1
Ich habe den Zweig, in dem ich mich befand, umbenannt und den Fehler "Bad Default Revision" erhalten. Das hat es für mich behoben, danke!
Dan Bechard
25

Noch nicht verpflichtet?

Es ist ein verwaister Zweig, wenn er kein Commit hat.

linquize
quelle
Hallo. Danke für die Antwort. Siehe die Antwort, die ich auf die Antwort unten gegeben habe. Ich bin mir ziemlich sicher, dass ich einen Push gemacht habe.
Richie
7

Hinweis: Git 2.6 (Q3 / Q4 2015) liefert endlich eine aussagekräftigere Fehlermeldung.

Siehe Commit ce11360 (29. August 2015) von Jeff King ( peff) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 699a0f3 , 02. September 2015)

log: Leere Diagnose HEADklarer

Wenn Sie ein leeres Repository initiieren oder klonen, ist die erste Nachricht vom Ausführen von " git log" nicht sehr freundlich:

$ git init
Initialized empty Git repository in /home/peff/foo/.git/
$ git log
fatal: bad default revision 'HEAD'

Lassen Sie uns diese Situation erkennen und eine freundlichere Nachricht schreiben:

$ git log
fatal: your current branch 'master' does not have any commits yet

Wir stellen auch den Fall fest, dass 'HEAD' auf einen defekten Schiedsrichter hinweist. Dies sollte noch seltener vorkommen, ist aber leicht zu erkennen.
Beachten Sie, dass wir nicht alle möglichen Fälle diagnostizieren. Wir verlassen uns darauf resolve_ref, was bedeutet, dass wir keine Informationen über komplexe Fälle erhalten. ZB --default masterwürde " " verwenden dwim_ref, um " refs/heads/master" zu finden , aber wir bemerken nur, dass " master" nicht existiert.
In ähnlicher Weise wird ein komplexer sha1-Ausdruck wie " --default HEAD^2" nicht als ref aufgelöst.

Aber das ist in Ordnung. In diesen Fällen greifen wir auf eine allgemeine Fehlermeldung zurück, und es ist unwahrscheinlich, dass sie trotzdem verwendet werden.
Das Fangen eines leeren oder gebrochenen "KOPFES" verbessert den allgemeinen Fall, und die anderen Fälle werden nicht zurückgebildet.

VonC
quelle
6

Stellen Sie sicher, dass der Zweig "Master" vorhanden ist! Es ist anscheinend nicht nur ein Name.

Ich habe diesen Fehler erhalten, nachdem ich ein leeres Bare-Repo erstellt, einen Zweig mit dem Namen "dev" darauf verschoben und versucht habe, das Git-Protokoll im Bare-Repo zu verwenden. Interessanterweise weiß der Git-Zweig, dass Dev der einzige existierende Zweig ist (daher denke ich, dass dies ein Git-Fehler ist).

Lösung: Ich habe den Vorgang wiederholt und diesmal "dev" in "master" für das Arbeits-Repo umbenannt, bevor ich zum Bare-Repo gewechselt bin. Erfolg!

user2394284
quelle
Das ist mir passiert, nachdem ich scpden Zweig umgestaltet habe.
EarthmeLon
2

Dies scheint aufzutreten, wenn .git/HEADauf einen Zweig verwiesen wird, der nicht existiert. Ich bin auf diesen Fehler in einem Repo gestoßen, in dem nichts enthalten war .git/refs/heads. Ich habe keine Ahnung, wie das Repo in diesen Zustand gekommen ist, ich habe von jemandem geerbt, der das Unternehmen verlassen hat.

Trebor unhöflich
quelle
Das gleiche ist mir passiert, außer dass die Datei in BSOD beschädigt wurde. Ich habe es gerade durch sha-1 Hash des aktuellen Kopfes ersetzt und jetzt scheint alles in Ordnung zu sein.
das Schwein
0

Ich glaube nicht, dass dies das Problem von OP ist, aber wenn Sie wie ich sind, sind Sie auf diesen Fehler gestoßen, als Sie versucht haben, mit Git-Installationsbefehlen ( update-index& cat-file) herumzuspielen, ohne jemals etwas zu begehen . Versuchen Sie also, etwas ( git commit -am 'First commit') festzuschreiben, und Ihr Problem sollte gelöst sein.

Bryce Johnson
quelle
-1

Ich habe den gleichen Fehler erhalten und konnte ihn nicht lösen.

Dann bemerkte ich 3 zusätzliche Dateien in einem meiner Verzeichnisse.

Die Dateien wurden benannt:

config, HEAD, description

Ich habe die Dateien gelöscht und der Fehler ist nicht aufgetreten.

config enthalten:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = true

HEAD enthalten:

ref: refs/heads/master

description enthalten:

Unnamed repository; edit this file 'description' to name the repository.
user3731622
quelle
1
Es ist eine ziemlich schlechte Idee, Dateien zu entfernen, die automatisch von git generiert werden. Sie sollten in der Lage sein, ein Problem nur durch Befehle zu beheben.
Rechtes Bein