Ich bin neu in git
und ich übe. Ich habe eine lokale Verzweigung erstellt, aber ich habe festgestellt, dass git push
meine Verzweigung nicht in das Repository hochgeladen wurde. Ich musste eigentlich tun : git push -u origin --all
.
Warum ist das? Ist ein Zweig nicht eine neue Änderung, die standardmäßig verschoben werden soll? Warum muss ich den zweiten Befehl ausführen?
git
version-control
Cratylus
quelle
quelle
push.default
sieheman git-config
). Wenn Sie dies tungit config --add push.default current
,git push
wird bei Bedarf automatisch der Zweig im Remote-Repo erstellt. Warum dies nicht die Standardeinstellung ist, wird in den Antworten erläutert.current
' und 'upstream
' finden Sie in meiner älteren Antwort stackoverflow.com/a/13751847/6309 .Antworten:
Der eigentliche Grund ist, dass es in einem neuen Repo (git init) keine Verzweigung gibt (nein
master
, überhaupt keine Verzweigung, keine Verzweigungen)Wenn Sie also zum ersten Mal auf ein leeres Upstream-Repo (im Allgemeinen ein nacktes ) drängen , hat dieses Upstream-Repo keinen gleichnamigen Zweig.
Und:
matching
' (alle gleichnamigen Zweige pushen und erstellen, falls sie nicht vorhanden sind).simple
' (Push nur für den aktuellen Zweig und nur, wenn seit git 1.7.11 ein ähnlich benannter Remote-Tracking-Zweig im Upstream vorhanden ist. )In beiden Fällen, da das vorgelagerte leere Repo keine Verzweigung hat:
Das heißt, Ihr lokaler erster Push hat keine Ahnung:
Sie müssen also mindestens Folgendes tun:
Aber wenn Sie nur das tun, werden Sie:
master
Zweig im Upstream (jetzt nicht leeres Repo): gut.master
' nach upstream (origin
) 'master
' (vorgelagerter Zweig) verschoben werden muss: schlecht.Aus diesem Grund wird empfohlen, beim ersten Druck Folgendes zu tun:
Das wird aufgezeichnet
origin/master
als Remote - Tracking - Zweig , und bei den nächsten Push aktivieren , um automatisch schiebenmaster
zuorigin/master
.Und das wird auch mit Push-Richtlinien funktionieren. '
current
' oder 'upstream
'.In jedem Fall reicht nach dem ersten
git push -u origin master
Schritt ein einfacher Git-Push aus, um den Master weiter in den rechten Upstream-Zweig zu schieben.quelle
git push
erwartet der nächste auch, dass der Zweig bereits existiert?simple
': Push an einen aufgezeichneten Upstream-Zweig, wenn dieser Upstream-Zweig denselben Namen wie der lokale hat. Ein einfachesgit push
wird ausreichen.git push --set-upstream origin new_branch
odergit push -u origin new_branch
kurz verwenden. Das-all
, was der Fragesteller verwendet hat, hat die Benennung eines bestimmten neuen Zweigs umgangen, indem alle Zweige eingeschlossen wurden. Dies wird von + Klas Mellbourn in seiner Antwort behandelt.Sie nicht, siehe unten
Ich finde diese 'Funktion' ziemlich ärgerlich, da ich nicht versuche, Raketen zum Mond zu schießen, sondern nur meinen verdammten Ast schiebe. Sie tun es wahrscheinlich auch, sonst wären Sie nicht hier!
Hier ist das Update: wenn Sie es wollen implizit für den aktuellen Zweig drücken , um unabhängig davon , ob dieser Zweig auf Herkunft existiert nur diesen Befehl einmal und Sie werden nie irgendwo wieder haben:
Wenn Sie also Zweige wie diesen erstellen:
und dann einige Commits machen und dann a
um sie zum Ursprung zu bringen (sich in diesem Zweig zu befinden) und dieser Zweig wird für Sie erstellt, wenn er nicht existiert.
Beachten Sie, dass das Bit -u sicherstellt, dass sie verknüpft sind, wenn Sie später aus diesem Zweig ziehen. Wenn Sie nicht vorhaben, den Zweig später zu ziehen (oder wenn Sie dies mit einem anderen Liner tun), ist dies nicht erforderlich.
quelle
git push -u
Ausgabe
git push
beim Verschieben eines neuen ZweigsEine einfache
git push
Annahme setzt voraus, dass bereits ein Remote-Zweig vorhanden ist, den der aktuelle lokale Zweig verfolgt. Wenn kein solcher Remote-Zweig vorhanden ist und Sie ihn erstellen möchten, müssen Sie diesen mit dem Flag-u
(Kurzform von--set-upstream
) angeben .Warum ist das so? Ich denke, die Implementierer waren der Meinung, dass das Erstellen eines Zweigs auf der Fernbedienung eine so wichtige Aktion ist, dass es schwierig sein sollte, dies versehentlich zu tun.
git push
ist etwas, was du die ganze Zeit machst."Ist ein Zweig nicht eine neue Änderung, die standardmäßig verschoben werden soll?" Ich würde sagen, dass "eine Änderung" in Git ein Commit ist. Ein Zweig ist ein Zeiger auf ein Commit. Für mich ist es sinnvoller, sich einen Push als etwas vorzustellen, das Commits auf die anderen Repositories überträgt. Welche Commits übertragen werden, hängt davon ab, in welchem Zweig Sie sich befinden und in welcher Verfolgungsbeziehung dieser Zweig zu den Zweigen auf der Fernbedienung steht.
Weitere Informationen zum Verfolgen von Zweigen finden Sie im Kapitel Remote-Zweige des Pro Git-Buches .
quelle
fatal
aber ich hatte bereits ein Commit in der Filiale gemacht. Ist das wichtig?git push -u origin
in das Remote-Repository kopiert.fatal
Nachricht wie die in der Antwort erwähnte erhalten habe. Hängt dieser Unterschied von der Tatsache ab, dass ich etwas für die Branche festgelegt habe?fatal
Nachricht nicht bekommen hast . Ich würde vermuten, dass der Unterschied genau davon abhängt, welche Git-Implementierung Sie verwenden. Meine Ausgabe ist von 1.8.1.msysgit.1 unter Windows 8.Ich konnte so schnell keine Begründung von den ursprünglichen Entwicklern finden, aber ich kann Ihnen eine fundierte Vermutung geben, die auf einigen Jahren Git-Erfahrung basiert.
Nein, nicht jeder Zweig ist etwas, das Sie nach außen drängen möchten. Es könnte ein privates Experiment darstellen.
Wohin sollen außerdem
git push
alle Filialen geschickt werden? Git kann mit mehreren Fernbedienungen arbeiten und Sie möchten möglicherweise unterschiedliche Zweige auf jedem haben. Beispielsweise kann ein zentrales GitHub-Repo-Projekt Release-Zweige haben. Eine GitHub-Gabel kann Themenzweige zur Überprüfung haben. und ein lokaler Git-Server kann Zweige haben, die lokale Konfiguration enthalten. Wenngit push
alle Zweige auf die Fernbedienung geschoben würden, die der aktuelle Zweig verfolgt, wäre diese Art von Schema leicht zu vermasseln.quelle
It might represent a private experiment
Okay, aber was ist die große Sache? Der "Haupt" -Zweig, in dem alle arbeiten, ist alsomaster
nicht betroffen. Es sei denn, Sie wollen den Quellcode versteckt halten 2)git push, without a remote, pushes to the current branch's remote
Ich habe Sie hier verloren :(git fetch
jedes Mal Hunderte von halbarbeitenden Filialen besuchen. 2) Ich beziehe mich aufgit push
das Standardverhalten. Es wird an die Fernbedienung gesendet, dass der aktuelle Zweig gegebenenfalls verfolgt wird.HEAD ist die Abkürzung für Current Branch, daher funktioniert Git Push -u Origin HEAD. Um diese Eingabe jedes Mal zu vermeiden, wenn ich einen Alias verwende:
git config --global alias.pp 'push -u origin HEAD'
Danach kann ich jedes Mal, wenn ich einen über git -b branch erstellten Zweig pushen möchte, ihn pushen mit:
git pp
Hoffe das spart Zeit für jemanden!
quelle
Bei der ersten Überprüfung
Schritt 1:
git remote -v
// Wenn git initialisiert gefunden wird, entfernen oder überspringen Sie Schritt 2
Schritt 2:
git remote rm origin
// Dann konfiguriere deine E-Mail-Adresse global git
Schritt 3:
git config --global user.email "[email protected]"
Schritt 4:
git initial
Schritt 5:
git commit -m "Initial Project"
// Wenn Sie bereits ein Projekt-Repo hinzugefügt haben, überspringen Sie Schritt 6
Schritt 6:
git remote add origin %repo link from bitbucket.org%
Schritt 7:
git push -u origin master
quelle
Ich habe gerade eine weitere Permutation dieses Themas erlebt.
Ich hatte einen Zweig mit dem Namen,
feat/XYZ-1234-some-description
weil ich an der Jira-Ausgabe 1234 arbeitete. Während der Arbeit erstellte ich eine neue Jira-Ausgabe, um eine kleinere Arbeit zu verfolgen, und als ich zu Push kam, entschied ich mich, zu einem Zweigstellennamen mit dieser neuen Ausgabenummer zu wechseln im:Dies gab mir den Fehler, der in diesem SO-Thread diskutiert wurde. Da ich jedoch versucht habe, auf einen anderen Zweigstellennamen als meinen aktuellen Zweig zu wechseln, war mein Problem anders als das hier beschriebene. Am Ende habe ich meine lokale Niederlassung umbenannt, bevor ich sie pushen konnte:
Nach etwas mehr lesen um erkannte ich, dass ich einen Satz hätte
src
auf diegit push
entweder auf den aktuellen Zweignamen, oder einfach nurHEAD
falls:quelle
Wenn Sie aktivieren, dass beim ersten Mal neue Änderungen aus Ihrem neuen Zweig übertragen werden. Und unter Fehler:
Verwenden Sie, um den aktuellen Zweig zu pushen und die Fernbedienung als Upstream einzustellen
quelle