Ich möchte Folgendes tun können:
Erstellen Sie einen lokalen Zweig basierend auf einem anderen (entfernten oder lokalen) Zweig (über
git branch
odergit checkout -b
).Schieben Sie den lokalen Zweig in das Remote-Repository (veröffentlichen), machen Sie ihn jedoch nachverfolgbar
git pull
undgit push
funktionieren Sie sofort.
Wie mache ich das?
Ich weiß über --set-upstream
Git 1.7 Bescheid , aber das ist eine Aktion nach der Erstellung. Ich möchte einen Weg finden, eine ähnliche Änderung vorzunehmen, wenn der Zweig in das Remote-Repository verschoben wird.
git
repository
git-branch
git-push
git-remote
Roni Yaniv
quelle
quelle
Antworten:
In Git 1.7.0 und höher können Sie einen neuen Zweig auschecken:
Dateien bearbeiten, hinzufügen und festschreiben. Dann drücken Sie mit dem
-u
(kurz für--set-upstream
) Option:Git richtet die Tracking-Informationen während des Pushs ein.
quelle
push.default
istupstream
, dies nicht das tut, was Sie denken, dass es tun wird. Es wird versucht, den vorhandenen Tracking-Zweig zu verschieben. Verwenden Sie:git push -u origin mynewfeature:mynewfeature
odergit branch --unset-upstream
zuerst.-u
Option jedes Mal, wenn wir den Zweig auf seine Fernbedienung schieben, oder brauchen wir sie nur beim ersten Mal?-u
einmal, um das Tracking zu starten . Danach einfach benutzengit push
Wenn Sie Ihr Repo nicht mit anderen teilen, ist dies hilfreich, um alle Ihre Filialen auf die Fernbedienung zu übertragen und
--set-upstream
für Sie korrekt zu verfolgen:(Nicht genau das, wonach das OP gefragt hat, aber dieser Einzeiler ist ziemlich beliebt)
Wenn Sie Ihr Repo mit anderen teilen, ist dies keine wirklich gute Form, da Sie das Repo mit all Ihren zwielichtigen experimentellen Zweigen verstopfen werden.
quelle
git pull --all
zieht alles woanders zurück? Kewlgit push --all -u
?Vor der Einführung von
git push -u
gab es keinegit push
Möglichkeit, das zu erhalten, was Sie wünschen. Sie mussten neue Konfigurationsanweisungen hinzufügen.Wenn Sie einen neuen Zweig erstellen mit:
Mit dem
git config
Befehl können Sie vermeiden, das direkt zu bearbeiten.git/config
Datei .Sie können die
.git/config
Datei auch manuell bearbeiten, um Tracking-Informationen für diesen Zweig zu erhalten.quelle
git push origin -u local_branch:remote_branch
Einfach ausgedrückt, um eine neue lokale Niederlassung zu erstellen , gehen Sie wie folgt vor:
Gehen Sie folgendermaßen vor, um es in das Remote- Repository zu übertragen:
quelle
git branch <branch-name>
undgit checkout -b <branch-name>
beide erstellen einen Zweig, aber die Kasse wechselt zum neuen Zweigsrc branch-name does not match any
Eine kleine Variation der hier bereits angegebenen Lösungen:
Erstellen Sie einen lokalen Zweig basierend auf einem anderen (entfernten oder lokalen) Zweig:
Schieben Sie den lokalen Zweig in das Remote-Repository (veröffentlichen), machen Sie ihn jedoch nachverfolgbar
git pull
undgit push
funktionieren Sie sofortDie Verwendung
HEAD
ist eine "praktische Möglichkeit, den aktuellen Zweig auf der Fernbedienung auf denselben Namen zu verschieben". Quelle: https://git-scm.com/docs/git-push In Git-Begriffen ist HEAD (in Großbuchstaben) ein Verweis auf den oberen Rand des aktuellen Zweigs (Baums).Die
-u
Option ist nur kurz für--set-upstream
. Dadurch wird eine Upstream-Tracking-Referenz für den aktuellen Zweig hinzugefügt. Sie können dies überprüfen, indem Sie in Ihrer .git / config-Datei nachsehen:quelle
git push -u origin <branch-name>
nicht für mich funktioniert, aber mitHEAD
statt<branch-name>
perfekt funktioniert :)Ich mache es einfach
über ein bereits geklontes Projekt.
Git erstellt einen neuen Zweig, der
remoteBranchToBeCreated
unter meinen Commits benannt ist, in denen ich gearbeitet habelocalBranch
.Bearbeiten : Hiermit wird der
localBranch
Upstream Ihres aktuellen lokalen Zweigs (möglicherweise benannt ) in geändertorigin/remoteBranchToBeCreated
. Um dies zu beheben, geben Sie einfach Folgendes ein:Ihre aktuelle lokale Niederlassung wird jetzt
origin/localBranch
zurückverfolgt.quelle
error: src refspec <new branch> does not match any.
wenn ich das versuche.Ich nehme an, Sie haben bereits ein Projekt geklont wie:
Erstellen Sie dann in Ihrer lokalen Kopie einen neuen Zweig und checken Sie ihn aus:
Angenommen, Sie haben auf Ihrem Server ein "git bare - init" erstellt und das myapp.git erstellt, sollten Sie:
Danach sollten Benutzer in der Lage sein
HINWEIS: Ich gehe davon aus, dass Ihr Server betriebsbereit ist. Wenn nicht, wird es nicht funktionieren. Eine gute Anleitung finden Sie hier .
HINZUGEFÜGT
Fügen Sie einen Remote-Zweig hinzu:
Überprüfen Sie, ob alles in Ordnung ist (holen Sie den Ursprung und listen Sie entfernte Zweige auf):
Erstellen Sie einen lokalen Zweig und verfolgen Sie den Remote-Zweig:
Alles aktualisieren:
quelle
git remote add origin
die lokale Niederlassung nachverfolgbar? ist das der Schlüsselbefehl hier?git remote add origin
Registrieren Sie nicht nur ein neues Remote-Repository. Es ist nur ein Schritt erforderlich, bevor Sie Ihren Zweig in dieses Remote-Repository verschieben (wenn Sie nicht jedes Mal die gesamte Adresseveraltet bearbeiten , einfach verwenden
git push -u origin $BRANCHNAME
Verwendung
git publish-branch
von Williams verschiedenen Git-Tools ( herrliches Repo und Klon) ).OK, kein Ruby, also - ignoriere die Sicherheitsvorkehrungen! - Nehmen Sie die letzten drei Zeilen des Skripts und erstellen Sie ein Bash-Skript
git-publish-branch
:Führen Sie dann aus
git-publish-branch REMOTENAME BRANCHNAME
, wobei REMOTENAME normalerweise der Ursprung ist (Sie können das Skript so ändern, dass der Ursprung als Standard verwendet wird usw.)quelle
git push
undgit config
befiehlt. Ich habe den Code des Skripts verwendet, um meine Antwort zu bearbeiten. Sie können diese Informationen verwenden, um ein kleines Shell-Skript zu erstellen, das das Puslishing für Sie erledigt.So erstellen Sie einen neuen Zweig, indem Sie von einem vorhandenen Zweig abzweigen
und schieben Sie dann diesen neuen Zweig mit in das Repository
Dadurch werden alle lokalen Commits erstellt und an einen neu erstellten Remote-Zweig weitergeleitet
origin/<new_branch>
quelle
Verwenden Sie für die GitLab-Version vor 1.7:
(name_branch, ex:
master
)Gehen Sie folgendermaßen vor, um es in das Remote-Repository zu übertragen:
(name_new_branch, Beispiel
feature
)quelle
Ich habe einen Alias erstellt, damit beim Erstellen eines neuen Zweigs der Remote-Zweig entsprechend verschoben und verfolgt wird. Ich habe folgenden Teil in die
.bash_profile
Datei eingefügt :Verwendung : Geben Sie einfach
gcb thuy/do-sth-kool
mitthuy/do-sth-kool
meinen neuen Filialnamen ein.quelle
Aufbauend auf den Antworten hier habe ich diesen Prozess als einfaches Bash-Skript abgeschlossen, das natürlich auch als Git-Alias verwendet werden kann.
Die wichtige Ergänzung für mich ist, dass ich dadurch aufgefordert werde, vor dem Festschreiben Unit-Tests durchzuführen, und standardmäßig den aktuellen Filialnamen übergebe.
git_push_new_branch.sh
quelle
Sie können es in 2 Schritten tun:
1. Verwenden Sie
checkout
zum Erstellen des lokalen Zweigs:Arbeiten Sie mit Ihrer Niederlassung, wie Sie möchten.
2. Verwenden Sie den
push
Befehl, um den Zweig automatisch zu erstellen und den Code an das Remote-Repository zu senden:quelle
Für größtmögliche Flexibilität können Sie einen benutzerdefinierten Git-Befehl verwenden . Erstellen Sie beispielsweise das folgende Python-Skript irgendwo in Ihrem
$PATH
unter dem Namengit-publish
und machen Sie es ausführbar:Dann
git publish -h
werden Ihnen Nutzungsinformationen angezeigt:quelle