1540 Stimmen

Standardverhalten von "git push" ohne Angabe eines Zweigs

Ich verwende den folgenden Befehl, um in meinen entfernten Zweig zu pushen:

git push origin sandbox

Wenn ich sage

git push origin

werden dadurch auch Änderungen in meinen anderen Zweigen übernommen, oder wird nur mein aktueller Zweig aktualisiert? Ich habe drei Zweige: master , production y sandbox .

El git push Die Dokumentation ist in dieser Hinsicht nicht sehr klar, daher möchte ich dies endgültig klären.

Welche Zweigstellen und Fernleitungen haben folgende Aufgaben git push Befehle genau aktualisieren?

git push 
git push origin

origin oben ist eine Fernbedienung.

Ich verstehe, dass git push [remote] [branch] wird nur dieser Zweig an die Gegenstelle übertragen.

0 Stimmen

Was die Konfiguration von Diff-Tools im Allgemeinen und das neue Skript git difftool betrifft, habe ich eine neue Antwort in dieser anderen SO-Frage hinzugefügt: stackoverflow.com/questions/255202/

73 Stimmen

Ich habe eine Blog-Beitrag über das überraschende Verhalten von git push die von Interesse sein könnten

2 Stimmen

@Mark: Bei anderen Arbeiten wird nur der aktuelle Zweig an den vorgelagerten Zweig gepusht. Schön.

21voto

Andriy F. Punkte 2357

Sie können den aktuellen Zweig mit dem Befehl

git push origin HEAD

(entnommen aus aquí )

19voto

VonC Punkte 1117238

(März 2012)
Achtung: die Voreinstellung " matching " Politik könnte sich bald ändern
(manchmal nach git1.7.10+)
:

Siehe " Bitte diskutieren Sie: Was soll "git push" tun, wenn Sie nicht sagen, was gepusht werden soll? "

In der aktuellen Einstellung (d.h. push.default=matching ), git push ohne Argument werden alle Zweige, die lokal und entfernt mit demselben Namen existieren, verschoben .
Dies ist in der Regel angemessen, wenn ein Entwickler in sein eigenes öffentliches Repository pusht, kann aber verwirrend, wenn nicht sogar gefährlich sein, wenn ein gemeinsames Repository verwendet wird.

Der Vorschlag lautet den Standardwert in '' ändern upstream ' , d.h. nur den aktuellen Zweig pushen und ihn in den Zweig pushen, aus dem git pull ziehen würde.
Ein weiterer Kandidat ist current '; dadurch wird nur der aktuelle Zweig in den gleichnamigen entfernten Zweig verschoben.

Was bisher diskutiert wurde, können Sie in diesem Thread nachlesen:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

Zu den früheren einschlägigen Diskussionen gehören:

Um sich an der Diskussion zu beteiligen, senden Sie Ihre Nachrichten an: git@vger.kernel.org

18voto

Mat Schaffer Punkte 1579

Ich habe dies gerade in meine .gitconfig aliases Sektion eingefügt und bin begeistert, wie es funktioniert:

pub = "!f() { git push -u ${1:-origin} `git symbolic-ref HEAD`; }; f"

Verschiebt den aktuellen Zweig zum Ursprung mit git pub oder ein anderes Repo mit git pub repo-name . Lecker.

4 Stimmen

Das ist schön, setzt aber leider voraus, dass der Zweig im anderen Repository den gleichen Namen hat. Versuchen Sie git push -u --repo="origin" $1; stattdessen. Es funktioniert ganz gut, außer wenn Sie in ein anderes Repository pushen, wird der Name des Zweiges der Name des anderen Repositorys sein, nicht der desjenigen, aus dem Sie pushen

0 Stimmen

Vielen Dank! Das bringt mich dazu, eine vollständigere Version zu erstellen, die den Status der Sendungsverfolgung vor dem Versand überprüft. Aber ich werde mit meinem für jetzt bleiben, da ich selten unterschiedliche Zweignamen zwischen Repos haben.

12voto

kenorb Punkte 134883

Sie können dieses Standardverhalten in Ihrer .gitconfig zum Beispiel:

[push]
  default = current

Um die aktuellen Einstellungen zu überprüfen, führen Sie aus:

git config --global --get push.default

3voto

Mark Fisher Punkte 9558

Anstatt Aliase zu verwenden, erstelle ich lieber Git-XXX-Skripte, damit ich sie leichter kontrollieren kann (unsere Entwickler haben alle ein bestimmtes quellkontrolliertes Verzeichnis in ihrem Pfad für diese Art von Dingen).

Dieses Skript (genannt git-setpush ) setzt den Konfigurationswert für remote.origin.push Wert auf einen Wert setzen, der nur den aktuellen Zweig verschiebt:

#!/bin/bash -eu

CURRENT_BRANCH=$(git branch | grep '^\*' | cut -d" " -f2)
NEW_PUSH_REF=HEAD:refs/for/$CURRENT_BRANCH

echo "setting remote.origin.push to $NEW_PUSH_REF"
git config remote.origin.push $NEW_PUSH_REF

Hinweis: Da wir Gerrit setzt es das Ziel auf refs/for/XXX in einen Überarbeitungszweig zu verschieben. Außerdem wird angenommen, dass origin Ihr Remote-Name ist.

Rufen Sie es nach dem Auschecken eines Zweigs mit

git checkout your-branch
git setpush

Es könnte natürlich angepasst werden, um auch den Checkout zu erledigen, aber ich mag Skripte, die eine Sache tun und sie gut machen

0 Stimmen

Eine gute Idee, remote.origin.push für die Verwendung von Gerrit einzustellen. Meine lokalen Feature-Zweige feature/fix_fubar sind alle auf allgemeinere Upstream-Zweige wie master o develop Dies würde also auf den falschen Stromabnehmer hinweisen. Wie sieht Ihr lokaler Fluss für gerrit-gesteuerte Repos aus?

0 Stimmen

Wenn Sie nur einen "Ziel"-Zweig in Gerrit haben, versuchen Sie einfach git config remote.origin.push HEAD:refs/for/master .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X