Ich bin kein Git-Meister, aber ich arbeite schon seit einiger Zeit damit, mit verschiedenen Projekten. In jedem Projekt kann ich immer git clone [repository]
und von diesem Punkt an immer git pull
, solange ich natürlich keine herausragenden Änderungen habe.
Vor kurzem musste ich zu einem früheren Zweig zurückkehren, und zwar mit git checkout 4f82a29
. Als ich wieder zum Ziehen bereit war, stellte ich fest, dass ich meinen Zweig wieder auf Master setzen musste. Jetzt kann ich nicht mit einer Geraden ziehen, git pull
sondern muss angeben git pull origin master
, was nervt und mir anzeigt, dass ich nicht ganz verstehe, was los ist.
Was hat sich geändert, was es mir nicht erlaubt, eine Straße git pull
ohne Angabe des Ursprungsmasters zu erstellen, und wie kann ich sie zurück ändern?
AKTUALISIEREN:
-bash-3.1$ cat config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[branch "master"]
[remote "origin"]
url = [email protected]:user/project.git
fetch = refs/heads/*:refs/remotes/origin/*
UPDATE 2: Um klar zu sein, ich verstehe, dass meine ursprüngliche Methode möglicherweise falsch war, aber ich muss dieses Repo reparieren, damit ich es einfach git pull
wieder verwenden kann. Derzeit führt Git Pull zu:
-bash-3.1$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me either. Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull ').
See git-pull(1) for details on the refspec.
If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:
branch.master.remote =
branch.master.merge =
remote..url =
remote..fetch =
See git-config(1) for details.
Ich kann erkennen, git pull
welcher Zweig zusammengeführt werden soll, und er funktioniert ordnungsgemäß, aber git pull
nicht wie ursprünglich vor meinem git checkout
.
quelle
Antworten:
Unter
[branch "master"]
, versuchen Sie Folgendes in die Git - Konfigurationsdatei des Repo - Zugabe (.git/config
):Dies sagt Git 2 Dinge:
git pull
bei Verwendung in der Hauptverzweigung, ohne dass eine Fernbedienung und eine Verzweigung angegeben sind, die Standardfernbedienung (Ursprung) und führen Sie die Änderungen aus der Fernverzweigung zusammen.Ich bin mir nicht sicher, warum dieses Setup aus Ihrer Konfiguration entfernt worden wäre. Möglicherweise müssen Sie den Vorschlägen folgen, die auch andere Personen veröffentlicht haben, aber dies kann funktionieren (oder zumindest helfen).
Wenn Sie die Konfigurationsdatei nicht manuell bearbeiten möchten, können Sie stattdessen das Befehlszeilentool verwenden:
quelle
.git/config
).$ git config branch.master.remote origin ; git config branch.master.merge refs/heads/master
stattdessen immer tun .Wenn Sie möchten, können Sie diese Optionen über die Befehlszeile (anstatt die Konfigurationsdatei zu bearbeiten) wie folgt festlegen:
Wenn Sie wie ich sind und möchten, dass dies die Standardeinstellung für alle Ihre Projekte ist, einschließlich derer, an denen Sie möglicherweise in Zukunft arbeiten, fügen Sie sie als globale Konfigurationseinstellung hinzu:
quelle
.git
in dem git den Hash-Code desmaster
aktuellen Commits zu behalten scheint .Dadurch werden Ihrer
config
Datei die folgenden Informationen hinzugefügt :Wenn Sie
branch.autosetuprebase = always
dann haben, wird es auch hinzufügen:quelle
fatal: Not a valid object name: 'origin/master'.
, obwohlorigin
es sich um eine gültige Fernbedienung handeltmaster
, die wie üblich in beiden Repos vorhanden ist.git branch --set-upstream-to=origin/master master
.Es fällt mir schwer, mich an die genauen
git config
odergit branch
Argumente wie in den Antworten von mipadi und Casey zu erinnern, daher verwende ich diese beiden Befehle, um die vorgelagerte Referenz hinzuzufügen:Dadurch werden die gleichen Informationen zu Ihrer .git / config hinzugefügt, aber ich finde es einfacher, mich daran zu erinnern.
quelle
Git Pull kombiniert zwei Aktionen: Abrufen neuer Commits aus dem Remote-Repository in den verfolgten Zweigen und anschließendes Zusammenführen dieser Commits in Ihrem aktuellen Zweig .
Wenn Sie ein bestimmtes Commit ausgecheckt haben, haben Sie keinen aktuellen Zweig, sondern nur HEAD, das auf das zuletzt von Ihnen vorgenommene Commit verweist. Es sind
git pull
also nicht alle Parameter angegeben. Deshalb hat es nicht funktioniert.Basierend auf Ihren aktualisierten Informationen versuchen Sie, Ihr Remote-Repo zurückzusetzen. Wenn Sie das Commit kennen, das den Fehler verursacht hat, können Sie am einfachsten damit umgehen, indem Sie
git revert
ein neues Commit aufzeichnen, das das angegebene Buggy-Commit rückgängig macht:Da es Ihr Server ist, den Sie ändern möchten, gehe ich davon aus, dass Sie den Verlauf nicht neu schreiben müssen, um das fehlerhafte Festschreiben zu verbergen.
Wenn der Fehler in einem Merge-Commit eingeführt wurde, funktioniert dieses Verfahren nicht. Siehe Zurücksetzen einer fehlerhaften Zusammenführung .
quelle
Es gibt auch eine Möglichkeit, Git so zu konfigurieren, dass immer der entsprechende Remote-Zweig zu dem Zweig gezogen und verschoben wird, der gerade in der Arbeitskopie ausgecheckt ist. Es wird als Tracking-Zweig bezeichnet, der von git ready standardmäßig empfohlen wird .
Für das nächste Repository über dem aktuellen Arbeitsverzeichnis:
Für alle Git-Repositorys, die nicht anders konfiguriert sind:
Art der Magie, IMHO aber dies könnte helfen , in Fällen , in denen der spezifischen Zweig ist immer der aktuelle Zweig .
Wenn Sie zum ersten Mal einen Zweig
branch.autosetupmerge
eingerichtettrue
und ausgecheckt haben, informiert Sie Git über die Verfolgung des entsprechenden Remote-Zweigs:Git wird dann automatisch zu diesem entsprechenden Zweig pushen:
quelle
Da ich meine Git-Konfigurationsdatei nicht bearbeiten wollte, folgte ich den Informationen in @ mipadis Beitrag und verwendete:
quelle
Ihre unmittelbare Frage, wie man es zum Master macht, müssen Sie tun, was es sagt. Geben Sie in Ihrer Zweigstellenkonfiguration die Referenz an, aus der abgerufen werden soll.
quelle
Ich wollte nur einige Informationen hinzufügen, die wir überprüfen können, ob sie sich
git pull
automatisch auf einen Zweig beziehen oder nicht.Wenn Sie den Befehl ausführen
git remote show origin
(unter der Annahme, dass origin der Kurzname für remote ist), zeigt git diese Informationen an, unabhängig davon, ob eine Standardreferenz für vorhanden istgit pull
oder nicht.Unten finden Sie eine Beispielausgabe (aus der Git-Dokumentation).
Bitte beachten Sie den Teil, in dem der lokale Zweig für Git Pull konfiguriert ist.
In diesem Fall
git pull
wird darauf verwiesengit pull origin master
Wenn Sie das Repository mit git clone geklont haben, werden diese Dinge zunächst automatisch erledigt. Wenn Sie jedoch eine Fernbedienung manuell mit git remote add hinzugefügt haben, fehlen diese in der git-Konfiguration. Wenn dies der Fall ist, fehlt in der Ausgabe von der Teil, in dem "Lokaler Zweig konfiguriert für 'git pull':" angezeigt wird
git remote show origin
.Die nächsten Schritte, die ausgeführt werden müssen, wenn keine Konfiguration für vorhanden ist
git pull
, wurden bereits durch andere Antworten erläutert.quelle