Ich habe zwei Zweige, Master und Dev. Ich arbeite immer an Entwicklern und checke Code erst dann in der Hauptniederlassung ein, wenn er für die Verwendung in der Produktion genehmigt wurde. Wenn ich das mache, muss ich Folgendes tun:
git checkout master
git merge dev
git checkout dev
Das ist furchtbar ausführlich, und da ich es häufig mache, möchte ich es minimieren. Gibt es einen git-Befehl, mit dem ich von meinem aktuellen Zweigentwickler zum anderen Zweigmaster zusammenführen kann, ohne zuerst den Hauptzweig auschecken zu müssen? So etwas wie:
git merge dev to master
das wäre großartig. Ich habe die Git-Dokumentation durchgesehen und nichts gesehen.
git
version-control
Chris
quelle
quelle
git stash
,git checkout master
,git merge dev
,git checkout dev
,git stash pop
.Antworten:
1. Fügen Sie einen Remote-Alias für Ihr lokales Repository hinzu, z.
(Oder unter Windows
git remote add self C:\path\to\your\repository
)2. Drücken Sie auf die Selbstfernbedienung, z.
quelle
/path/to/your/repository
ist der Pfad zu Ihrem Arbeitsbaum, dh enthalten Sie nicht das.git
Verzeichnis. Dies sollte auch selbstverständlich sein: Die Fernbedienung muss aktualisiert werden, wenn Sie das Repo verschieben.git remote add self file:///c/projects
kommt gerade mit den Verwendungshinweisen zurückdev
) zusammenführen und dann das Zusammenführungs-Commit mit verwendengit push self dev:master
..
hat bei mir gut funktioniert :git push . head:master
.Die derzeit am höchsten bewertete Antwort von @zerome ist gut, aber etwas unnötig ausführlich.
In der Basis Ihres Git Repo können Sie dies einfach tun:
git push . dev:master
Eine allgemeinere Lösung, die überall im Baum funktionieren würde, wäre:
quelle
git push . dev:master
hat mein Leben sehr vereinfacht! Beste Antwort bei weitem, dankegit push origin dev:master
merge --no-ff
Verhalten damit zu replizieren ?git remote add self file:///myRepo
?Am besten verwenden Sie einfach einen Alias in Ihrer globalen gitconfig (
~/.gitconfig
):damit Sie es aus jedem Repository als aufrufen können
quelle
&&
nicht verwendet habe;
, würde die Zusammenführung fehlschlagen und nicht versuchen, zurückzuschalten. Hoffentlich ist der Benutzer klug genug, um die Meldung "Zusammenführung fehlgeschlagen" zu sehen und damit umzugehen.merge-to = "!f() { export tmp_branch=
Git-Zweig grep '*' | tr -d ‚*‘; git checkout $1 && echo git merge $tmp_branch && echo git checkout $tmp_branch; unset $tmp_branch; }; f"
, es ist lassen Sie mich haben nicht zur Zeit bin ich auf in der Branche zu geben, also wenn ich fusionieren wollendev
inmaster
und ich bin aufdev
jetzt Ich tippe einfachgit merge-to master
merge-to = "!f() { export tmp_branch=`git branch | grep '* ' | tr -d '* '`; git checkout $1 && git merge $tmp_branch && git checkout $tmp_branch; unset $tmp_branch; }; f"
git branch | grep '* ' | tr -d '* '
; git checkout $ 1 && git merge --no-ff $ tmp_branch && git checkout $ tmp_branch; unset tmp_branch;}; f"Eine kleine Änderung des Jefromi-Alias, bei der Sie den aktuellen Zweig nicht eingeben müssen.
Sie verwenden es also wie folgt :
git merge-to dev
.Dadurch wird auf den
dev
Zweig umgeschaltet, mit CURRENT zusammengeführt und dann zurückgeschaltet.Angenommen, Sie befinden sich in einem
master
Zweig, wird der Master mit dev zusammengeführt, und Sie befinden sich weiterhin auf dem Master.Es geht definitiv zu meinen Dotfiles :)
quelle
Das ist alt, aber ...
Kombinieren Sie die Lösungen von @ kevin-lyda und @ dmytrii-nagirniak oben. Dieser Alias führt den aktuellen Zweig mit dem angegebenen Zweig zusammen. Es verwendet die Remotes-Methode mit und verwendet Git-Befehle, um den Kontext abzurufen.
Zu verwenden wie:
quelle
So führen Sie den aktuellen Zweig in einem anderen Zweig zusammen, ohne den anderen Zweig auszuchecken:
Schnellvorlauf-Zusammenführung
Das ist wirklich einfach. Per Definition bedeutet eine Schnellvorlauf-Zusammenführung einfach, dass der Verzweigungszeiger im Festschreibungsbaum nach vorne verschoben wird. Sie müssen also nur Folgendes simulieren :
Tipp: Wenn Sie a ausgeführt haben
git fetch
und neue Commits eingegeben habenorigin/master
, können Sie denmaster
Zweig verschieben, ohne ihn auschecken zu müssen.Zusammenführen über Merge Commit
Dies ist nicht immer möglich. Um ein Zusammenführungs-Commit zu erstellen, müssen Sie einen Zusammenführungsvorgang ausführen. Um einen Zusammenführungsvorgang durchzuführen, sollten Sie Commits in der anderen Verzweigung haben, die sich nicht in der aktuellen Verzweigung befinden.
Wenn Sie Commits in der
master
Filiale haben, die sich nicht in derdev
Filiale befinden, können Sie:Erläuterung:
master
In den temporären Zweig einbinden und Commit-Nachrichteneditor starten. Wenn das Zusammenführungs-Commit so aussehen soll, als hätten Sie dendev
Zweig zusammengeführtmaster
, bearbeiten Sie es folgendermaßen:dazu:
Tipp: Sie können verwenden,
-m "Merge branch 'dev'"
anstatt-e
schneller zu sein.master
Verzweigungszeiger so, dass er auf das Zusammenführungs-Commit verweist.dev
Filiale an.Dies berührt immer noch Ihren Arbeitsbaum, aber nur minimal. Der Baum wird nicht bis zum ursprünglichen Zustand zurückgesetzt,
master
nur um die Entwicklungsänderungen erneut einzuführen. Einige mögen sich nicht darum kümmern, aber für andere mag es wichtig sein.quelle
Oft kommen Sie aus dem Zweig, in den Sie den aktuellen Zweig einbinden möchten. In diesem Fall könnten Sie Folgendes tun:
git co - && git merge @{-1}
beispielsweise:
quelle
Meine Lösung ähnelt den anderen Antworten mit den folgenden Unterschieden:
set -ex
sodass jeder Befehl gedruckt wird. Wenn der Befehl fehlschlägt, wird die Funktion sofort beendetgit merge
: git merge
der sicherstellt, dass die Tab-Vervollständigung bei einigen Shell-Setups funktioniert (z. B.gitfast
von oh-my-zsh).quelle