Push-Current-Zweig erzwingen

Lesezeit: 6 Minuten

Benutzer-Avatar
iblau

Ich rebasiere oft Feature Branches und möchte sie dann auf den Server pushen.

git push --force origin feature-mongodb-support

Gibt es eine Abkürzung für git push --force origin <current branch>?

  • Ich habe die Konfig/Tracking immer so eingerichtet git push allein pusht zum standardmäßigen Remote-Tracking-Zweig. Wenn du das kannst, könntest du runterkommen git push -f? (Nur neugierig: Was ist Ihr Backup-Plan in diesem Workflow, wenn Sie eine schlechte Rebase pushen? Ich nehme an, Sie sind der einzige, der an diesen Feature-Zweigen arbeitet?)

    – mpontillo

    12. Juli 2012 um 14:22 Uhr


  • Geht es bei dieser Frage nicht speziell darum, wie man den aktuellen Zweignamen im oft verwendeten loswird git push -f origin <current branch name> konstruieren? Dann verfehlt die akzeptierte Antwort den Punkt völlig und der Kommentar von @ Mike sollte die akzeptierte Antwort sein.

    – AndreKR

    24. Januar 2015 um 3:57 Uhr

  • Ich denke, die beste Antwort ist, es als Standard festzulegen: git config --global push.default current (von hier).

    – orad

    7. Oktober 2015 um 16:34 Uhr

Benutzer-Avatar
Sergej K.

Sie können Aliase verwenden, um den Befehl abzukürzen. Verwenden Sie es wie folgt:

git config --global alias.fpush "push --force origin"

Um jetzt Ihren Zweig zu pushen, geben Sie einfach Folgendes ein:

git fpush feature-mongodb-support

Oder Sie können den Zweignamen sogar fest in den Befehl codieren:

git alias fpush "push --force origin feature-mongodb-support"

und nur verwenden git fpush um Ihre wertvolle Arbeit in den Upstream zu schieben.

Updates ohne Fast-Forward sind jedoch gefährlich, da Sie im Grunde den gesamten Verlauf auf dem Server überschreiben, der zwischen dem letzten Merge/Rebase in Ihrem lokalen Zweig und dem erzwungenen Push aufgetreten ist. Wenn Sie sie oft machen müssen, gibt es definitiv Stimmt etwas nicht in Ihrem Arbeitsablauf.

  • Ich bin der einzige, der an einem Feature-Zweig arbeitet. Ich möchte nur, dass der Feature-Zweig gegenüber dem Master-Zweig vorlauffähig bleibt, um mir das Leben zu erleichtern. Ist daran etwas falsch?

    – iblau

    12. Juli 2012 um 15:10 Uhr

  • Ja, es ist riskant. Sie überschreiben Ihren Zweig mit nur einem Befehl. Ein besserer Punkt wird sein, Ihren Feature-Zweig interaktiv auf den Master-Zweig zu rebasen, sobald das Feature fertig ist. Sie haben immer noch einen sauberen Verlauf in Ihrem Master und es besteht kein Risiko in Bezug auf all diese Überschreibungen.

    – Sergej K.

    12. Juli 2012 um 16:15 Uhr

  • Ich mache das, weil ich neue Änderungen aus dem Master-Branch einbinden muss, um zu testen, ob die neue Funktion noch mit dem neuen Master-Code funktioniert. Wo ist das Risiko?

    – iblau

    12. Juli 2012 um 16:20 Uhr

  • Das Risiko besteht darin, den entfernten Zweig (zusammen mit seinem Verlauf) mit fehlerhaftem Code zu überschreiben und Ihre vorherige Arbeit zu verlieren. Wenn Sie dies nicht interessiert, verwenden Sie einfach die Lösung aus der Antwort.

    – Sergej K.

    12. Juli 2012 um 16:24 Uhr

  • Wenn Sie diesen Rat befolgen und den Remote-Namen (normalerweise origin) in Ihrem Git-Alias ​​haben Sie möglicherweise Probleme mit bash [tab] Vervollständigung versucht immer noch, die Fernbedienung hinzuzufügen, anstatt direkt zum Anbieten von Zweignamen zu springen. Um dies zu beheben, definieren Sie Ihre eigene benutzerdefinierte Ersetzungsfunktion in ~/.profile nach der Beschaffung von bash_completion: _git_fpush() { _git_branch; } (wobei “fpush” mit dem Namen Ihres Git-Alias ​​übereinstimmt.) Dies veranlasst Bash, Ihren Alias ​​genauso zu behandeln wie die branch Befehl.

    – Berichterstatter

    23. Oktober 2015 um 14:52 Uhr


Benutzer-Avatar
jlleblanc

Nachdem ich diese Antworten und diese Antwort auf eine verwandte Frage (https://stackoverflow.com/a/18782415/586) gelesen hatte, habe ich diesen Alias ​​erstellt, um Push zu erzwingen origin basierend auf dem aktuellen Zweignamen:

fp = "!git push -f origin \"$(git rev-parse --abbrev-ref HEAD)\""

  • Wie würde dies funktionieren, wenn der entfernte Zweig (auf den wir pushen) nicht denselben Namen wie der lokale Zweig hat?

    – Benutzer1021726

    5. März 2015 um 9:43 Uhr

  • @ user1021726 tut es nicht.

    – Jlleblanc

    5. März 2015 um 17:16 Uhr

  • Dies ist die Antwort, die die gesamte Frage abdeckt … mit der Einschränkung, dass die lokale Verzweigung und die entfernte Verzweigung denselben Namen haben müssen.

    – Damien

    18. September 2017 um 14:20 Uhr

Benutzer-Avatar
Irgoff

Sie können das Standardverhalten ändern, indem Sie die push.default Eigentum :

git config --global push.default current

dann:

git push -f

erzwingt einen Push auf Ihren aktuellen Zweig.

Hier ist ein Copy/Paste von http://schacon.github.io/git/git-config.html:

push.default

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

  • nichts – Nichts schieben.

  • passend – Schiebe alle passenden Äste. Alle Zweige mit demselben Namen an beiden Enden werden als übereinstimmend betrachtet. Dies ist die Standardeinstellung.

  • stromaufwärts – Schieben Sie den aktuellen Zweig zu seinem Upstream-Zweig.

  • Verfolgung – veraltetes Synonym für Upstream.

  • aktuell – Pushen Sie den aktuellen Zweig zu einem gleichnamigen Zweig.

  • Funktioniert wunderbar und macht genau das, was der OP verlangt hat. Vielen Dank!

    – Ben Bucksch

    5. November 2021 um 23:14 Uhr

Wenn du benutzt oh mein zsch kannst du einfach machen

ggfl

die dies für Sie tun

git push --force-with-lease origin <your_argument>/$(current_branch)

https://github.com/robbyrussell/oh-my-zsh/wiki/Cheatsheet

Das sollte den Trick machen:

git alias fpush "push --force origin"

Welche lassen Sie verwenden git fpush als kürzere Alternative.

  • Wenn ich mich nicht irre, drückt das alle Zweige, die zufällig lokale Änderungen aufweisen, einschließlich potenzieller Hauptzweige, oder völlig unabhängige Zweige, nicht nur der aktuelle Zweig. In Kombination mit dem Kraftstoß ist dies äußerst gefährlich.

    – Ben Bucksch

    5. November 2021 um 23:17 Uhr


Benutzer-Avatar
Klas Š.

Um automatisch zu zwingen, drücken Sie auf die Filiale, die verfolgt wird (unabhängig von seinem Namen und Upstream) habe ich diesen Alias ​​entwickelt:

fbrpush=!git push $(git rev-parse --abbrev-ref=loose --symbolic-full-name @{upstream} \
                    | sed 's:/: +:')

(Zeile ist zur besseren Lesbarkeit unterbrochen)

(basierend auf einer anderen SO-Antwort)

  • Wenn ich mich nicht irre, drückt das alle Zweige, die zufällig lokale Änderungen aufweisen, einschließlich potenzieller Hauptzweige, oder völlig unabhängige Zweige, nicht nur der aktuelle Zweig. In Kombination mit dem Kraftstoß ist dies äußerst gefährlich.

    – Ben Bucksch

    5. November 2021 um 23:17 Uhr


Der aktuelle Zweigname kann auch automatisch abgeleitet werden.

Ich verwende ein kleines Shell-Skript, um den Force-Push auf den aktuellen Zweig durchzuführen:

git branch | grep '*' | awk '{print $2}' | xargs -I % git push origin % -f

Der Befehl git branch markiert den aktuellen Zweig mit * Symbol, damit wir die relevante Zeile mit erhalten können grep '*' und analysieren Sie es, um den Zweignamen zu erhalten.

Dann kann der Shortcut-Befehl als Alias ​​in definiert werden .bashrc oder .zshrc:

alias gfp=/path/to/script

Aktualisieren.

Seit Git 2.22 (siehe diese Antwort: stackoverflow.com/a/6245587/1326411 ) kann es vereinfacht werden zu:

alias git-fp='git branch --show-current | xargs -I % git push origin % --force-with-lease'

  • Es gibt einfachere Möglichkeiten: stackoverflow.com/a/6245587/1326411

    – Krakowski-Mudrac

    4. März um 22:26 Uhr

  • Ich danke dir sehr! Das sieht viel eleganter aus 🙂

    – Vladimir Vagaytsev

    8. März um 20:19 Uhr

1281040cookie-checkPush-Current-Zweig erzwingen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy