Git - Aktuelle Verzweigungsverknüpfung drücken

363

Gibt es eine Verknüpfung, mit der Git angewiesen wird, den aktuellen Tracking-Zweig auf den Ursprung zu verschieben?
Hinweis: Ich weiß, dass ich das Standard-Push-Verhalten ändern kann , suche jedoch nach einer Ad-hoc-Lösung, die das Standardverhalten nicht ändert.

Angenommen, ich bin in einem Zweig, den feature/123-sandbox-testsich verwenden würde

git push origin feature/123-sandbox-tests

das ist langweilig. Ich suche nach einer Abkürzung, so etwas wie

git push origin current

Wo Git weiß, dass Strom ist feature/123-sandbox-tests.


Bearbeiten : Ab Version 2.0 hat sich das Standardverhalten von git in ein intuitiveres Verhalten geändert, was ich erreichen wollte. Siehe diese SO-Frage für Details.

Bearbeiten 2 : Die Antwort von ceztko ist die beste Antwort, da der aktuelle Zweig unabhängig von den Einstellungen verschoben werden kann.

Elad
quelle

Antworten:

702

Laut git pushDokumentation:

git push origin HEAD
    A handy way to push the current branch to the same name on the remote.

Also ich denke was du brauchst ist git push origin HEAD. Es kann auch nützlich sein git push -u origin HEAD, Upstream-Tracking-Informationen in der lokalen Niederlassung einzurichten, wenn Sie noch nicht zum Ursprung verschoben haben.

ceztko
quelle
11
Ich ziehe dies der Einstellung von push.default gegenüber einfach oder aktuell vor, da verschiedene Maschinen unterschiedliche Einstellungen haben können. Möglicherweise gewöhnen Sie sich daran, git pushnur den aktuellen Zweig zu verschieben, aber auf anderen Computern können Sie versehentlich alle übereinstimmenden Zweige verschieben.
wisbucky
1
@wisbucky Ich habe mehrere Aliase, einschließlich co. Wenn ich also versuchen würde, Code ohne meine ~/.gitconfigDatei auf dieser VM herunterzuziehen und dann auszuchecken, werde ich es sofort wissen. Dadurch fühle ich mich ziemlich sicher, wenn ich die Push-Standardeinstellung auf ändere upstream.
Damon
9
Interessant, dass dies nicht mit nur funktioniert @, was als gültiger Alias ​​für dokumentiert ist HEAD. (zB git push -u origin @)
void.pointer
197

Mit dem folgenden Befehl können Sie git so konfigurieren , dass es zum aktuellen Zweig wechselt

git config --global push.default current

dann mach es einfach

git push 

Dadurch wird der Code in Ihren aktuellen Zweig verschoben.

Mahesh
quelle
Ist es sinnvoll, push = refs/heads/current:refs/for/master/currenteinen 'Remote'-Abschnitt in .git / config hinzuzufügen ? Das heißt, ist "aktuell" hier ein besonderes Wort? Oder wird nach einem Zweig namens "current" gesucht?
David Doria
6
@DavidDoria 'current' ist kein hier genannter Zweig.
Mahesh
Am besten git push -u origin feature_branch_nameUpstream / Tracking einrichten! Wenn Sie mindestens ein Remote-Repository verwenden.
Flo
40

Sie sollten sich eine ähnliche Frage im Standardverhalten von "git push" ohne Angabe eines Zweigs ansehen

Grundsätzlich wird erklärt, wie Sie das Standardverhalten festlegen, um den gerade ausgeführten aktuellen Zweig zu pushen git push. Wahrscheinlich brauchen Sie:

git config --global push.default current

Andere Optionen:

  • nichts : Schieben Sie nichts
  • Matching : Schieben Sie alle passenden Zweige
  • Upstream / Tracking : Schieben Sie den aktuellen Zweig auf das, was gerade verfolgt wird
  • current : Schieben Sie den aktuellen Zweig
Najor
quelle
11

Ich verwende einen solchen Alias ​​in meiner .bashrc-Konfiguration

alias gpb='git push origin `git rev-parse --abbrev-ref HEAD`'

Auf dem Befehl $gpbnimmt es den aktuellen Zweignamen und schiebt ihn zum Ursprung.

Hier sind meine anderen Aliase:

alias gst='git status'
alias gbr='git branch'
alias gca='git commit -am'
alias gco='git checkout'
Theodor
quelle
8

Für das, was es wert ist, die ultimative Abkürzung:

In meinem habe .bash_profileich alias push="git push origin HEAD", also wenn pushich tippe, weiß ich, dass ich zum aktuellen Zweig drücke, in dem ich mich befinde.

Ryan Rebo
quelle
6

Wenn Sie git 1.7.x verwenden, können Sie den folgenden Befehl ausführen, um den Remote-Tracking-Zweig festzulegen.

git branch --set-upstream feature/123-sandbox-tests origin/feature/123-sandbox-tests

Dann können Sie einfach git pushalle Änderungen verwenden. Eine vollständigere Antwort finden Sie in der akzeptierten Antwort auf eine ähnliche Frage hier.

Wenn Sie den aktuellen Zweig nur mit dem Push-Befehl pushen möchten, können Sie das Push-Verhalten in Upstream ändern:

git config --global push.default upstream
Faruk Sahin
quelle
Vielen Dank, aber in diesem Fall würden nicht ALLE Tracking-Zweige zum Ursprung verschoben?
Elad
Ich habe die Antwort geändert, siehe Link, die Antwort ist dort vollständiger.
Faruk Sahin
Wiederum besteht das Problem darin, dass alle Zweige, die Zweige verfolgen, auf diese Weise verschoben werden. Wie ich in meiner Frage geschrieben habe, handelt es sich bei dem Zweig in erster Linie um einen nachverfolgten Zweig. Daher halte ich es für überflüssig, den von Ihnen vorgeschlagenen Upstream-Zweig festzulegen. Oder liege ich falsch?
Elad
Anschließend können Sie git so konfigurieren, dass nur der aktuelle Zweig gepusht wird, indem Sie das git-Push-Verhalten ändern. git config --global push.default upstreamLegt das Push-Verhalten so fest, dass nur der aktuelle Zweig gepusht wird.
Faruk Sahin
5

Der einfachste Weg: git push -u origin feature/123-sandbox-testseinmal ausführen . Dadurch wird der Zweig so verschoben, wie Sie es gewohnt sind, und die Upstream-Tracking-Informationen werden in Ihrer lokalen Konfiguration festgelegt. Danach können Sie git pushdie verfolgten Zweige einfach auf ihre vorgelagerten Fernbedienungen übertragen.

Sie können dies auch in der Konfiguration selbst tun, indem Sie branch.<branch name>.mergeden Namen des Remote-Zweigs (in Ihrem Fall derselbe wie der lokale Name) und optional branch.<branch name>.remoteden Namen des Remote-Filters festlegen, auf den Sie pushen möchten (standardmäßig origin). Wenn Sie in Ihrer Konfiguration nachsehen, gibt es höchstwahrscheinlich bereits einen dieser Sätze master, sodass Sie diesem Beispiel folgen können.

push.defaultStellen Sie schließlich sicher, dass Sie die Einstellung berücksichtigen . Der Standardwert ist "Matching", was zu unerwünschten und unerwarteten Ergebnissen führen kann. Die meisten Leute, die ich kenne, finden "Upstream" intuitiver, was nur den aktuellen Zweig betrifft.

Details zu jeder dieser Einstellungen finden Sie in der Manpage git-config .

Beim zweiten Gedanken, beim erneuten Lesen Ihrer Frage, denke ich, dass Sie das alles wissen. Ich denke, was Sie tatsächlich suchen, existiert nicht. Wie wäre es mit einer Bash-Funktion wie (ungetestet):

function pushCurrent {
  git config push.default upstream
  git push
  git config push.default matching
}
Ryan Stewart
quelle
1

Mit Hilfe von Ceztkos Antwort habe ich diese kleine Hilfsfunktion geschrieben, um mir das Leben zu erleichtern:

function gpu()
{
    if git rev-parse --abbrev-ref --symbolic-full-name @{u} > /dev/null 2>&1; then
        git push origin HEAD
    else
        git push -u origin HEAD
    fi
}

Es verschiebt den aktuellen Zweig zum Ursprung und legt auch den Remote-Tracking-Zweig fest, falls dieser noch nicht eingerichtet wurde.

Bantak
quelle