wake-up-neo.com

Standardverhalten von "git Push" ohne Angabe eines Zweigs

Ich verwende den folgenden Befehl, um zu meiner Remote-Niederlassung zu pushen:

git Push Origin sandbox

Wenn ich sage

git Push Origin

ändert sich das Push auch in meinen anderen Filialen oder aktualisiert es nur meine aktuelle Filiale? Ich habe drei Zweige: master, production und sandbox.

Die git Push -Dokumentation ist darüber nicht sehr klar, daher möchte ich dies für immer klarstellen.

Welche Zweige und Fernbedienungen werden mit den folgenden Befehlen git Push genau aktualisiert?

git Push 
git Push Origin

Origin oben ist eine Fernbedienung.

Ich verstehe, dass git Push [remote] [branch] nur diesen Zweig zur Fernbedienung pushen wird.

1312
PlagueHammer

Sie können das Standardverhalten steuern, indem Sie Push.default in Ihrer Git-Konfiguration festlegen. Aus der Dokumentation zu git-config (1) :

Push.default

Definiert die Aktion, die git Push ausführen soll, wenn in der Befehlszeile keine Referenzspezifikation angegeben ist, in der Fernbedienung keine Referenzspezifikation konfiguriert ist und keine Referenzspezifikation durch eine der in der Befehlszeile angegebenen Optionen impliziert wird. Mögliche Werte sind:

  • nothing: nichts drücken

  • matching: Alle passenden Zweige verschieben

    Alle Zweige mit demselben Namen an beiden Enden werden als übereinstimmend angesehen.

    Dies war die Standardeinstellung, jedoch nicht seit Git 2.0 (simple ist die neue Standardeinstellung).

  • upstream: Verschieben Sie den aktuellen Zweig in den Upstream-Zweig (tracking ist ein veraltetes Synonym für Upstream).

  • current: Verschieben Sie den aktuellen Zweig zu einem Zweig mit demselben Namen

  • simple: (neu in Git 1.7.11) wie Upstream, weigert sich jedoch, Push auszuführen, wenn der Name des Upstream-Zweigs nicht mit dem Namen des lokalen Zweigs übereinstimmt

    Dies ist die sicherste Option und eignet sich gut für Anfänger.

    Dieser Modus ist in Git 2.0 zum Standard geworden.

Der einfache, aktuelle und vorgelagerte Modus ist für diejenigen gedacht, die nach Beendigung der Arbeit einen einzelnen Zweig herausschieben möchten, auch wenn die anderen Zweige noch nicht zum Herausschieben bereit sind

Befehlszeilenbeispiele:

So zeigen Sie die aktuelle Konfiguration an:

git config --global Push.default

So legen Sie eine neue Konfiguration fest:

git config --global Push.default current
1537
Brian L

Sie können das Standardverhalten für Ihr Git mit Push.default einstellen

git config Push.default current

oder wenn Sie viele Repositories haben und dasselbe für alle wollen

git config --global Push.default current

Das aktuell in diesem Setup bedeutet, dass Sie standardmäßig nur den aktuellen Zweig pushen, wenn Sie git Push tun

Andere Optionen sind:

  • nichts: nichts schieben
  • matching: Alle passenden Zweige pushen (Standard)
  • tracking: Verschieben Sie den aktuellen Zweig zu dem, was er verfolgt
  • current: Schieben Sie den aktuellen Zweig

PDATE - NEUE MÖGLICHKEITEN

Ab Git 1.7.11 gehen Sie wie folgt vor:

git config --global Push.default simple

Dies ist eine neue Einstellung, die auf die gleiche Weise wie die aktuelle Einstellung funktioniert. Gerüchten zufolge wird ab Version 2.0 standardmäßig Git verwendet

200
Christoffer

_git Push Origin_ überträgt alle Änderungen auf die lokalen Zweige, deren entfernte Zweige mit Origin übereinstimmen. Wie für _git Push_

Funktioniert wie _git Push <remote>_, wobei _<remote>_ die Gegenstelle des aktuellen Zweigs ist (oder Origin, wenn für den aktuellen Zweig keine Gegenstelle konfiguriert ist).

Aus dem Abschnitt Beispiele der Manpage git-Push

198
baudtack

Ich habe meinen Code einfach an einen Zweig übergeben und ihn in den Github verschoben:

git branch SimonLowMemoryExperiments
git checkout SimonLowMemoryExperiments
git add .
git commit -a -m "Lots of experimentation with identifying the memory problems"
git Push Origin SimonLowMemoryExperiments
54
neoneye

Hier ist eine sehr praktische und hilfreiche Information über Git Push : Git Push: Nur der Tipp

Die häufigste Verwendung von git Push ist das Übertragen Ihrer lokalen Änderungen in Ihr öffentliches Upstream-Repository. Angenommen, der Upstream ist ein Remote mit dem Namen "Origin" (der Standard-Remote-Name, wenn Ihr Repository ein Klon ist) und der zu aktualisierende Zweig heißt "master" (der Standard-Zweigname). Dies geschieht mit: git Push Origin master

git Push Origin überträgt Änderungen von allen lokalen Zweigen an die entsprechenden Zweige der Origin-Fernbedienung.

git Push Origin master überträgt Änderungen von der lokalen Hauptverzweigung an die entfernte Hauptverzweigung.

git Push Origin master:staging überträgt Änderungen vom lokalen Master-Zweig an den Remote-Staging-Zweig, falls vorhanden.

24

(März 2012)
Achtung: Die Standardrichtlinie "matching" wird sich möglicherweise bald ändern
(manchmal nach git1.7.10 +)
:

Siehe " Bitte besprechen Sie: Was soll" git Push "tun, wenn Sie nicht sagen, was zu drücken ist? "

In der aktuellen Einstellung (dh Push.default=matching) _git Push_ ohne Argument pusht alle Zweige, die lokal und remote mit demselben Namen existieren .
Dies ist normalerweise angebracht, wenn ein Entwickler auf sein eigenes öffentliches Repository zugreift, es kann jedoch verwirrend sein, wenn es nicht gefährlich ist, wenn ein freigegebenes Repository verwendet wird.

Der Vorschlag ist, die Voreinstellung auf 'upstream' zu ändern , dh nur den aktuellen Zweig pushen und ihn an den Zweig pushen, den git ziehen würde ziehen aus.
Ein anderer Kandidat ist 'current'; Dadurch wird nur die aktuelle Verzweigung in die gleichnamige entfernte Verzweigung verschoben.

Was bisher diskutiert wurde, ist in diesem Thread zu sehen:

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

Bisherige relevante Diskussionen beinhalten:

Um an der Diskussion teilzunehmen, senden Sie Ihre Nachrichten an: [email protected]

19
VonC

Ich habe dies einfach in meinen Abschnitt .gitconfig-Aliase eingefügt und finde es toll, wie es funktioniert:

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

Schiebt den aktuellen Zweig mit git pub oder einem anderen Repo mit git pub repo-name nach Origin. Lecker.

18
Mat Schaffer

Sie können den aktuellen Zweig mit dem Befehl verschieben

git Push Origin HEAD

(entnommen aus hier )

9
Andriy F.

Ein Git-Push versucht, alle lokalen Zweige auf den Remote-Server zu pushen. Dies ist wahrscheinlich das, was Sie nicht wollen. Ich habe ein paar Annehmlichkeiten eingerichtet, um damit umzugehen:

Alias ​​"gpull" und "gpush" passend:

In meinem ~/.bash_profile

get_git_branch() {
  echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
}
alias gpull='git pull Origin `get_git_branch`'
alias gpush='git Push Origin `get_git_branch`'

Wenn Sie also "gpush" oder "gpull" ausführen, wird nur der Zweig "derzeit aktiv" übertragen.

8
Cody Caughlan

Sie können dieses Standardverhalten in Ihrem .gitconfig ändern, zum Beispiel:

_[Push]
  default = current
_

Führen Sie Folgendes aus, um die aktuellen Einstellungen zu überprüfen:

_git config --global --get Push.default
_
7
kenorb

Anstatt Aliase zu verwenden, ziehe ich es vor, git-XXX-Skripte zu erstellen, damit ich sie einfacher in der Quellcodeverwaltung verwenden kann (unsere Entwickler haben für diese Art von Dingen alle ein bestimmtes Quellcodeverwaltungsverzeichnis).

Dieses Skript (genannt git-setpush) setzt den Konfigurationswert für remote.Origin.Push auf einen Wert, der nur den aktuellen Zweig pusht:

#!/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

beachten Sie, dass wir Gerrit verwenden, um das Ziel auf refs/for/XXX zu setzen und es in einen Überprüfungszweig zu verschieben. Es wird auch davon ausgegangen, dass Origin Ihr entfernter Name ist.

Rufen Sie es auf, nachdem Sie einen Zweig mit ausgecheckt haben

git checkout your-branch
git setpush

Es könnte natürlich angepasst werden, um auch das Auschecken zu erledigen, aber ich mag Skripte für mach eine Sache und mach es gut

3
Mark Fisher

Ich habe meiner .bashrc-Datei die folgenden Funktionen hinzugefügt, um diese Aufgaben zu automatisieren. Es tut Git Push/Git Pull + Name des aktuellen Zweigs.

function gpush()
{
  if [[ "x$1" == "x-h" ]]; then
    cat <<EOF
Usage: gpush
git: for current branch: Push changes to remote branch;
EOF
  else
    set -x
    local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
    git Push ${bname}
    set +x
  fi
}

function gpull()
{
  if [[ "x$1" == "x-h" ]]; then
    cat <<EOF
Usage: gpull
git: for current branch: pull changes from
EOF
  else
    set -x
    local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
    git pull ${bname}
    set +x
  fi
}
2
MichaelMoser