Ich erstelle einen neuen Zweig in Git:
git branch my_branch
Drück es:
git push origin my_branch
Angenommen, jemand hat einige Änderungen am Server vorgenommen, und ich möchte abrufen origin/my_branch
. Ich mache:
git pull
Aber ich verstehe:
You asked me to pull without telling me which branch you
want to merge with, and 'branch.my_branch.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.
If you often merge with the same branch, you may want to
use something like the following in your configuration file:
[branch "my_branch"]
remote = <nickname>
merge = <remote-ref>
[remote "<nickname>"]
url = <url>
fetch = <refspec>
See git-config(1) for details.
Ich habe gelernt, dass ich es schaffen kann mit:
git branch --set-upstream my_branch origin/my_branch
Aber warum muss ich das für jeden Zweig tun, den ich erstelle? Ist es nicht klar , dass , wenn ich schiebe my_branch
in origin/my_branch
, dann würde ich ziehen will origin/my_branch
in my_branch
? Wie kann ich dies zum Standardverhalten machen?
git
git-branch
Ram Rachum
quelle
quelle
branch.autosetupmerge
bedeutet, dass die Upstream-Konfiguration für einen neuen Zweig nur automatisch festgelegt wird, wenn ein Zweig aus einem Remote-Tracking-Zweig erstellt wird (z. B.<remote-name>/<branch-name>
) (siehe git-config (1) ). Sie erstellen Ihre Filialen wahrscheinlich aus vorhandenen lokalen Filialen. Wenn Sie effektiv direkt von der Spitze eines Remote-Zweigs verzweigen (obwohl Sie sich in einem lokalen Zweig befinden), können Siegit branch my_branch <remote-name>/<branch-name>
die Upstream-Konfiguration automatisch einrichten.--set-upstream
Option ist veraltet. Sie sollten--track
oder--set-upstream-to
stattdessen verwenden.--set-upstream
veraltet ist, sollten die Git-Entwickler es möglicherweise aus der Hilfemeldung entfernen, die angezeigt wird, wenn Siegit push
ohne Optionen ausgeführt werden und kein Upstream festgelegt ist.git branch --set-upstream
ist veraltet.git push --set-upstream
ist nicht.Antworten:
Eine Verknüpfung, die nicht davon abhängt, sich die Syntax für
git branch --set-upstream
1 zu merken, lautet:... das erste Mal, dass Sie diesen Zweig schieben. Oder um zum aktuellen Zweig zu einem gleichnamigen Zweig zu wechseln (praktisch für einen Alias):
Sie müssen es nur
-u
einmal verwenden, und das stellt die Zuordnung zwischen Ihrem Zweig und dem Zweig auforigin
die gleiche Weise her wie zuvorgit branch --set-upstream
.Persönlich halte ich es für eine gute Sache, diese Zuordnung zwischen Ihrem Zweig und einem Zweig auf der Fernbedienung explizit einrichten zu müssen. Es ist nur eine Schande, dass die Regeln für
git push
und unterschiedlich sindgit pull
.1 Es mag albern klingen, aber ich vergesse sehr häufig, den aktuellen Zweig anzugeben, vorausgesetzt, dies ist die Standardeinstellung - dies ist nicht der Fall, und die Ergebnisse sind höchst verwirrend :)
Update 11.10.2012 : Anscheinend bin ich nicht die einzige Person, die es leicht fand, sich zu irren! Vielen Dank an VonC für den Hinweis, dass Git 1.8.0 das Offensichtlichere einführt
git branch --set-upstream-to
, das wie folgt verwendet werden kann, wenn Sie sich in der Branche befindenmy_branch
:... oder mit der kurzen Option:
Diese Änderung und ihre Begründung sind in den Versionshinweisen zu git 1.8.0, Versionskandidat 1, beschrieben :
quelle
-u
Sie auch, dass Sie den Push mit diesem Flag erneut ausführen können , auch wenn Sie das erste Mal vergessen haben, wenn Sie drücken. Dadurch wird die Verfolgung gestartet.alias gpo="git push --set-upstream origin $(git branch | awk '/^\* / { print $2 }')"
Sie können dies mit weniger Eingabe erreichen. Ändern Sie zunächst die Funktionsweise Ihres Push:
Dadurch wird auf den
origin my_branch
Teil geschlossen, sodass Sie Folgendes tun können:Dadurch wird der Remote-Zweig mit demselben Namen erstellt und verfolgt.
quelle
origin
wenn eingit push -u
neu erstellter Zweig im neu erstellten Repository ausgeführt wird? Ist die Annahme, dass das Repository geklont wurde, so dass der Remote-Zweig des aktuellen Zweigs eingestellt istorigin
?pull
Sie angeben, von wo. Die-u
Sätze auf dem Zweig - Tracking zwischen Herkunft und Ihrem lokalen Repo.push
- die den gesamten Punkt dieser Frage besiegt. Kurz gesagt, es gibt keine gute Antwort. Dass Git-Entwickler darauf bestehen, dieses ungeschickte Benutzererlebnis (AUX) angesichts weit verbreiteter Meinungsverschiedenheiten in der Community beizubehalten, ist ... aufschlussreich. Und entmutigend. (Meistens entmutigend.)Sie können einfach
an erster Stelle. Wenn Sie
branch.autosetupmerge
oderbranch.autosetuprebase
(mein Favorit) aufalways
(Standard isttrue
) setzen,my-branch
wird automatisch verfolgtorigin/whatever
.Siehe
git help config
.quelle
git checkout -t origin/whatever
, was auchwhatever
als neuer Filialname wählt . Sehr angenehm!-u
/ heißen--set-upstream
.git checkout -t origin/whatever
funktioniert nicht für mich, wenn ich versuche, einen neuen Zweig zu erstellen:fatal: Cannot update paths and switch to branch 'whatever' at the same time.
git checkout -b my-branch origin/whatever
hat auch den gleichen Fehler (ich versuche, einen neuen Zweig zu erstellen, der nicht auf lokaler oder Remote-fatal: Cannot update paths and switch to branch 'whatever' at the same time.
Dies ist meine häufigste Verwendung für The Fuck .
Außerdem macht es Spaß, Schimpfwörter in Ihr Terminal einzugeben.
quelle
Sie können Upstream auf zwei Arten einfacher einrichten. Zuerst, wenn Sie den Zweig erstellen:
oder nachdem Sie einen Zweig erstellt haben, können Sie diesen Befehl verwenden.
Sie können auch in einem einzigen Befehl verzweigen, auschecken und Upstream einrichten:
Ich persönlich bevorzuge dies in einem zweistufigen Befehl:
quelle
git branch -u origin/my-branch
kann ich laufengit pull
, um meine Änderungen abzurufen.git checkout -t origin/my-branch
verzichten-b my-branch
, es wird nur automatisch aufmy-branch
den lokalen Filialnamen geschlossen. Wie @Spongman bereits erwähnt hat, funktioniert dieser Befehl jedoch nicht, wenn erorigin/my-branch
nicht zuerst vorhanden ist.git push -u origin/my-branch
scheitert für mich mitfatal: 'origin/my-branch' does not appear to be a git repository
. Dies funktioniert:git push -u origin my-branch
Sie können verwenden:
Dadurch wird der Upstream-Zweig jedes Mal verknüpft, wenn Sie einen neuen Zweig erstellen oder auschecken.
Siehe https://felipec.wordpress.com/2013/09/01/advanced-git-concepts-the-upstream-tracking-branch/
Dies funktioniert auch
branch.autosetuprebase
, wenn Sie einem auf Rebase ausgerichteten Workflow folgen, diesen jedoch nur verwenden, wenn Sie wissen, was Sie tun, da Ihr Pull-Verhalten standardmäßig auf Rebase basiert, was zu merkwürdigen Ergebnissen führen kann.quelle
--set-upstream
Nachrichtmaster
. 2. Führen Sie ausgit checkout -b new_branch
. 3. Fügen Sie diesem Zweig ein Commit hinzu. 4.git push origin new_branch
. Dadurch wird das Commit auf denmaster
Zweig am Ursprung übertragen (und nicht auf einen neuen Zweig am Ursprung mit dem Namennew_branch
).Übrigens die Verknüpfung zum Verschieben des aktuellen Zweigs auf eine Fernbedienung mit demselben Namen:
quelle
Ich persönlich verwende diesen folgenden Alias in Bash
in der Datei ~ / .gitconfig
und in der Datei ~ / .bashrc oder ~ / .zshrc
quelle
git pushup
der den aktuellen Zweig immer zum Ursprung schiebt. Ich kann immer nurgit pushup
anstelle vongit push
👍Wenn das Folgende nicht funktioniert:
Sie sollten auch die lokale Konfiguration Ihres Projekts aktualisieren, da Ihr Projekt möglicherweise lokale Git-Konfigurationen hat:
quelle
Sie können git pull auch explizit mitteilen, welcher Remote-Zweig abgerufen werden soll (wie in der Fehlermeldung erwähnt):
git pull <remote-name> <remote-branch>
Seien Sie jedoch vorsichtig: Wenn Sie sich in einem anderen Zweig befinden und einen expliziten Pull ausführen, wird die von Ihnen gezogene Referenz mit dem Zweig zusammengeführt, in dem Sie sich befinden!
quelle
Wenn Sie versuchen, einen Zweig zu verfolgen, der bereits auf der Fernbedienung vorhanden ist (z. B. origin / somebranch), ihn aber noch nicht lokal ausgecheckt hat, können Sie Folgendes tun:
Hinweis: '-t' ist die verkürzte Version der Option '--track'.
Dies schafft die gleiche Assoziation auf Anhieb.
quelle
git checkout somebranch
also gleichwertig.git fetch
haben?git fetch
odergit pull
. Ich habe jedoch nie festgestellt, dass dies ein Problem ist.quelle
Ich verwende diesen Git-Alias, anstatt den Vorschlag von Git jedes Mal zu kopieren / einzufügen: https://gist.github.com/ekilah/88a880c84a50b73bd306
Quelle unten kopiert (fügen Sie diese Ihrer
~/.gitconfig
Datei hinzu):quelle
Sie können einen wirklich guten Alias einrichten, der dies ohne die übermäßig ausführliche Syntax handhabt.
Ich habe den folgenden Alias in
~/.gitconfig
:Nachdem Sie einen Commit für einen neuen Zweig vorgenommen haben, können Sie Ihren neuen Zweig verschieben, indem Sie einfach den folgenden Befehl eingeben:
quelle
po
?push origin
? Was passiert, wenn dies mehrmals ausgeführt wird?git push -f
Alias eingerichtetgit pf
, also benutze ich diesen, sobald der Ursprung bereits verschoben wurde.HEAD
Für diejenigen, die nach einem Alias suchen, der funktioniert
git pull
, verwende ich Folgendes:Wann immer Sie bekommen:
Renn einfach:
Und du kannst loslegen
quelle
Weil Git die coole Fähigkeit hat, verschiedene Zweige in verschiedene "Upstream" -Repositorys zu schieben / ziehen. Sie können sogar separate Repositorys zum Drücken und Ziehen verwenden - auf demselben Zweig. Dies kann einen verteilten, mehrstufigen Fluss erzeugen. Ich kann sehen, dass dies bei Projekten wie dem Linux-Kernel nützlich ist. Git wurde ursprünglich für dieses Projekt entwickelt.
Infolgedessen wird nicht davon ausgegangen, welches Repo Ihre Filiale verfolgen soll.
Auf der anderen Seite verwenden die meisten Leute git nicht auf diese Weise, daher ist dies möglicherweise ein gutes Argument für eine Standardoption.
Git ist im Allgemeinen ziemlich niedrig und es kann frustrierend sein. Es gibt jedoch GUIs, und es sollte einfach sein, Hilfsskripte zu schreiben, wenn Sie sie weiterhin über die Shell verwenden möchten.
quelle
Sie können auch tun
git push -u origin $(current_branch)
quelle
Ich habe es
legit
aufgrund dieses Problems wiederentdeckt (nur OS X). Jetzt verwende ich beim Verzweigen nur noch diese beiden Befehle:legit publish [<branch>]
Veröffentlicht den angegebenen Zweig auf der Fernbedienung. (alias:pub
)legit unpublish <branch>
Entfernt den angegebenen Zweig von der Fernbedienung. (alias:unp
)SublimeGit kommt mit
legit
Unterstützung standardmäßig die ganze Verzweigung Routine so einfach wie Drücken von Strg-b macht.quelle
Wir benutzen Phabricator und pushen nicht mit Git. Ich musste einen Bash-Alias erstellen, der unter Linux / Mac funktioniert
speichern
quelle
Hier ist ein Bash-Alias für Git-Push, der für jeden Push sicher ausgeführt werden kann und automatisch zwischen der Einstellung des Upstreams für den ersten Push und dem anschließenden normalen Push umschaltet.
Ursprünglicher Beitrag
quelle