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>
?
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>
?
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
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
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)
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
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
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 runterkommengit 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