Ich habe mich gefragt, ob es eine einfache Möglichkeit gibt, einen lokalen Zweig mit einem entfernten Zweig mit einem anderen Namen zu pushen und zu ziehen, ohne immer beide Namen anzugeben.
Beispielsweise:
$ git clone myrepo.git
$ git checkout -b newb
$ ...
$ git commit -m "Some change"
$ git Push Origin newb:remote_branch_name
Wenn nun jemand remote_branch_name aktualisiert, kann ich:
$ git pull
Und alles wird zusammengeführt/schnell weitergeleitet. Wenn ich jedoch Änderungen an meinem lokalen "newb" vornehme, kann ich nicht:
$ git Push
Stattdessen muss ich:
% git Push Origin newb:remote_branch_name
Scheint ein bisschen albern. Wenn git-pull
git-config branch.newb.merge
Verwendet, um zu bestimmen, woher sie gezogen werden sollen, warum konnte git-Push
Keine ähnliche Konfigurationsoption haben? Gibt es eine nette Abkürzung dafür oder soll ich einfach den langen Weg fortsetzen?
Sicher. Setzen Sie einfach Ihren Push.default
Auf upstream
, um Zweige in ihre Upstreams zu verschieben (das ist dasselbe, aus dem pull
gezogen wird, definiert durch branch.newb.merge
), Anstatt Verschieben von Zweigen zu Zweigen, deren Namen übereinstimmen (dies ist die Standardeinstellung für Push.default
, matching
).
git config Push.default upstream
Beachten Sie, dass dies vor Git 1.7.4.2 tracking
nicht upstream
hieß. Wenn Sie also eine ältere Version von Git verwenden, verwenden Sie stattdessen tracking
. Die Option Push.default
Wurde in Git 1.6.4 hinzugefügt. Wenn Sie also eine ältere Version verwenden, steht diese Option nicht zur Verfügung und Sie müssen den Zweig explizit angeben, zu dem Push gesendet werden soll.
Wenn Sie den ersten Push ausführen, fügen Sie den Parameter -u hinzu:
git Push -u Origin my_branch:remote_branch
Nachfolgende Schübe werden gehen, wo Sie wollen.
BEARBEITEN:
Wie aus dem Kommentar hervorgeht, wird dadurch nur Pull eingerichtet.
git branch --set-upstream
sollte es tun.
Der Befehl von Adam ist jetzt veraltet. Sie können verwenden:
git branch --set-upstream-to Origin/my_remote_branch my_local_branch
um den Upstream-Zweig von my_local_branch
auf Origin/my_remote_branch
zu setzen.
Hier ist der Prozess, der für mich funktioniert hat.
git clone original-repo-url
git remote rename Origin upstream
git remote add Origin new-repo-url
Jetzt lautet Ihr neues Repo "Origin" und das ursprüngliche Repo "Upstream". Bestätigen Sie dies, indem Sie git remote -v ausführen. (Randnotiz: Upstream wird zum Abrufen vom ursprünglichen Repository verwendet, um Ihre lokale Kopie mit dem Projekt zu synchronisieren, zu dem Sie beitragen möchten. Origin wird zum Ziehen und Verschieben verwendet, da Sie einen Beitrag zu Ihrem eigenen Repository leisten können.).
git Push Origin master
Jetzt ist der Master Ihres neuen Remote-Repos (auf Github) mit dem Original-Master synchronisiert, verfügt jedoch nicht über einen der Funktionszweige.
git rebase upstream/branch-name
git Push Origin master
Rebase ist eine intelligente Verschmelzung. Drücken Sie dann erneut auf "Push to Master", um den ausgewählten Feature-Zweig auf dem neuen Repo als Master anzuzeigen.
Wahlweise:
git remote rm upstream
git remote add upstream new-repo-url