Ich bin anscheinend schrecklich darin, Git zu benutzen, trotz meiner besten Versuche, es zu verstehen.
Von kernel.org für git push
:
-u
--set-upstream
Fügen Sie für jeden Zweig, der auf dem neuesten Stand ist oder erfolgreich gepusht wurde, eine Upstream-Referenz (Tracking-Referenz) hinzu, die von git-pull (1) ohne Argumente und anderen Befehlen verwendet wird. Weitere Informationen finden Sie
branch.<name>.merge
in git-config (1).
Hier ist branch.<name>.merge
von git config
:
branch.<name>.merge
Definiert zusammen mit
branch.<name>.remote
dem Upstream-Zweig für den angegebenen Zweig. Es teilt git fetch / git pull mit, welcher Zweig zusammengeführt werden soll, und kann auch git push beeinflussen (siehe push.default). In der Verzweigung<name>
teilt es git fetch mit, dass die Standardreferenzspezifikation zum Zusammenführen in FETCH_HEAD markiert werden soll. Der Wert wird wie der entfernte Teil einer Referenzspezifikation behandelt und muss mit einer Referenz übereinstimmen, die von der von angegebenen angegebenen Fernbedienung abgerufen wird"branch.<name>.remote"
. Die Zusammenführungsinformationen werden von git pull (das zuerst git fetch aufruft) verwendet, um den Standardzweig für das Zusammenführen zu suchen. Ohne diese Option wird bei git pull standardmäßig die erste abgerufene Referenzspezifikation zusammengeführt. Geben Sie mehrere Werte an, um eine Octopus-Zusammenführung zu erhalten. Wenn Sie git pull so einrichten möchten, dass es<name>
von einem anderen Zweig im lokalen Repository zusammengeführt wird, können Sie darauf verweisenbranch.<name>.merge
zum gewünschten Zweig und verwenden Sie die spezielle Einstellung. (eine Periode) fürbranch.<name>.remote
.
Ich habe erfolgreich ein Remote-Repository mit github eingerichtet und mein erstes Commit erfolgreich durchgeführt mit:
git push -u origin master
Dann habe ich mein zweites Commit unwissentlich erfolgreich in mein Remote-Repository übertragen, indem ich:
git commit -m '[...]'
Da ich jedoch fälschlicherweise dachte, ich müsste noch einmal origin
von drängen master
, rannte ich:
# note: no -u
git push origin master
Was hat das gemacht? Es schien überhaupt keine Wirkung zu haben. Habe ich "rückgängig gemacht" git push -u origin master
?
I'm apparently terrible at using git, despite my best attempts to understand it.
- Ich hatte noch nie jemanden, der mich so gut nachgebildet hat.Antworten:
Der Schlüssel ist "argumentloses Git-Pull". Wenn Sie eine
git pull
von einem Zweig aus ausführen, ohne eine Quellfernbedienung oder einen Zweig anzugeben, überprüft git diebranch.<name>.merge
Einstellung, um zu wissen, woher sie ziehen soll.git push -u
Legt diese Informationen für den Zweig fest, den Sie verschieben.Um den Unterschied zu erkennen, verwenden wir einen neuen leeren Zweig:
Zuerst drücken wir ohne
-u
:Nun, wenn wir hinzufügen
-u
:Beachten Sie, dass die Tracking-Informationen so eingerichtet wurden, dass sie
git pull
wie erwartet funktionieren, ohne die Fernbedienung oder den Zweig anzugeben.Update: Bonus-Tipps:
git pull
wirkt sich zusätzlich zu dieser Einstellung auch das Standardverhalten von ausgit push
. Wenn Sie es sich zur Gewohnheit machen-u
, den zu verfolgenden Remote-Zweig zu erfassen, empfehle ich, denpush.default
Konfigurationswert auf zu setzenupstream
.git push -u <remote> HEAD
schiebt den aktuellen Zweig auf einen Zweig mit demselben Namen auf<remote>
(und richtet auch das Tracking ein, damit Sie es danach tun könnengit push
).quelle
git push <remote> <branch>
macht die Dinge eindeutig . Wenn Sie die Fernbedienung oder die Zweigstelle auslassen, greift Git auf die Zweigstellenkonfigurationseinstellungen zurück, die für Sie festgelegt wurdengit push -u
.git push origin test
(was nicht der Fall ist-u
). Sie haben dann gezeigt, dass die Mehrdeutigkeitgit push -u origin test
beseitigt wird . Gibt es einen Tippfehler oder bin ich nur wieder dicht?git push <remote> <branch>
es eindeutig ist, meine ich das, was relativ zurgit push
Zweigkonfiguration hängt. Ebensogit pull <remote> <branch>
ist eindeutig undgit pull
stützt sich auf die Zweigkonfiguration. Sobald Sie mit gedrückt haben-u
, funktionieren beidegit push
undgit pull
wie erwartet.git push
- es sei denn, Sie stellen sichpush.default
selbst ein, verwendetgit push
nur die Konfiguration des Upstream-Zweigs, um zu entscheiden, auf welche Fernbedienung übertragen werden soll, nicht die zu aktualisierende Fernzweigstelle.git push origin master
und das gleiche für andere Seite IE.git pull origin master
.. Also wenn Zweigzweigwechsel dann können Siegit push origin branch_name
und das gleiche auf andere Seite IE.git pull origin branch_name
… ist das gleiche wie:
Mach die letzte Aussage, wenn du das vergisst
-u
!Oder Sie könnten es erzwingen:
Wenn Sie den Befehl dies für Sie tun lassen, werden Ihre Fehler ausgewählt, z. B. wenn Sie einen nicht vorhandenen Zweig eingegeben haben oder nicht
git remote add
. obwohl das sein könnte, was Sie wollen. :) :)quelle
master
ist nur ein Beispiel :)git branch master -u origin/master
details @ stackoverflow.com/a/2286030/790359-u
Option zu verwenden, geben Siegit push -u
sofort OK ein.--setup-upstream
dies veraltet sein wird:The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
git branch --set-upstream-to=origin/master master
Einfacher ausgedrückt:
Technisch gesehen
-u
fügt das Flag einen Tracking-Verweis auf den Upstream-Server hinzu, auf den Sie pushen.Was hier wichtig ist, ist, dass Sie dies tun können,
git pull
ohne weitere Argumente anzugeben. Wenn Sie beispielsweise einmal eine Aktion ausgeführt habengit push -u origin master
, können Sie später anrufen,git pull
und Git weiß, dass Sie dies tatsächlich gemeint habengit pull origin master
.Andernfalls müssten Sie den gesamten Befehl eingeben.
quelle
-u
beiorgin master
jedem nächsten Zug das Flag setze , wird darauf verwiesen. Und wenn ich dasgit pull
Verhalten ändern möchte, sollte ich ausführengit push -u origin some_other_branch
und werdegit pull
jetzt darauf verweisensome_other_branch
? Vielen Dank!git push -u origin master
Alle notwendigen Git-Bash-Befehle zum Drücken und Ziehen in Github:
Wenn Sie eine Datei bearbeiten möchten, gehen Sie wie folgt vor:
So sehen Sie alle Filialen und ihre Commits:
quelle