Ich möchte in der Lage sein, Folgendes zu tun:
Erstellen Sie einen lokalen Zweig basierend auf einem anderen (entfernten oder lokalen) Zweig (über git branch
oder git checkout -b
)
Übertragen Sie den lokalen Zweig in das Remote-Repository (veröffentlichen), machen Sie ihn jedoch verfolgbar, sodass git pull
und git Push
sofort funktionieren.
Wie mache ich das?
Ich kenne --set-upstream
in Git 1.7, aber das ist eine Aktion nach der Erstellung. Ich möchte eine Möglichkeit finden, eine ähnliche Änderung vorzunehmen, wenn der Zweig in das Remote-Repository verschoben wird.
In Git 1.7.0 und höher können Sie einen neuen Zweig auschecken:
git checkout -b <branch>
Dateien bearbeiten, hinzufügen und festschreiben. Dann Drücken Sie mit der -u
(Abkürzung für --set-upstream
) Option:
git Push -u Origin <branch>
Git richtet die Tracking-Informationen während des Pushs ein.
Wenn Sie Ihr Repo nicht mit anderen teilen, ist dies nützlich, um alle Ihre Zweige an die Fernbedienung zu senden und --set-upstream
für Sie korrekt zu verfolgen:
git Push --all -u
(Nicht genau das, wonach das OP gefragt hat, aber dieser Einzeiler ist ziemlich beliebt.)
Wenn Sie Ihr Repo mit anderen teilen, ist dies keine gute Form, da Sie das Repo mit all Ihren zweifelhaften experimentellen Zweigen verstopfen werden.
Vor der Einführung von git Push -u
gab es keine git Push
-Option, um das zu erhalten, was Sie wünschen. Sie mussten neue Konfigurationsanweisungen hinzufügen.
Wenn Sie einen neuen Zweig erstellen, indem Sie:
$ git checkout -b branchB
$ git Push Origin branchB:branchB
Sie können den Befehl git config
verwenden, um zu vermeiden, dass die Datei .git/config
direkt bearbeitet wird.
$ git config branch.branchB.remote Origin
$ git config branch.branchB.merge refs/heads/branchB
Oder Sie können die .git/config
-Datei manuell bearbeiten, um Informationen zur Verfolgung dieses Zweigs zu erhalten.
[branch "branchB"]
remote = Origin
merge = refs/heads/branchB
Einfach ausgedrückt, um eine neue lokale Verzweigung zu erstellen, gehen Sie wie folgt vor:
git branch <branch-name>
Gehen Sie wie folgt vor, um es in das Repository remote zu verschieben:
git Push -u Origin <branch-name>
Eine kleine Variation der hier bereits angegebenen Lösungen:
Erstellen Sie eine lokale Verzweigung basierend auf einer anderen (entfernten oder lokalen) Verzweigung:
git checkout -b branchname
Übertragen Sie den lokalen Zweig in das Remote-Repository (veröffentlichen), machen Sie ihn jedoch verfolgbar, sodass git pull
und git Push
sofort funktionieren
git Push -u Origin HEAD
Die Verwendung von 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 Anfang des aktuellen Zweigs ( Baum).
Die Option -u
steht nur für --set-setupstream
. Dadurch wird eine vorgelagerte Verfolgungsreferenz für den aktuellen Zweig hinzugefügt. Sie können dies überprüfen, indem Sie in Ihrer .git/config-Datei nachsehen:
Ich mache es einfach
git Push -u Origin localBranch:remoteBranchToBeCreated
über ein bereits geklontes Projekt.
Git erstellt einen neuen Zweig mit dem Namen remoteBranchToBeCreated
unter meinen Commits, die ich in localBranch
ausgeführt habe.
Ich nehme an, Sie haben bereits ein Projekt wie das folgende geklont:
git clone http://github.com/myproject.git
Erstellen Sie dann in Ihrer lokalen Kopie einen neuen Zweig und checken Sie ihn aus:
git checkout -b <newbranch>
Angenommen, Sie haben auf Ihrem Server ein "git bare --init" erstellt und myapp.git erstellt, dann sollten Sie:
git remote add Origin ssh://example.com/var/git/myapp.git
git Push Origin master
Danach sollten Benutzer in der Lage sein
git clone http://example.com/var/git/myapp.git
HINWEIS: Ich gehe davon aus, dass Ihr Server in Betrieb ist. Wenn nicht, wird es nicht funktionieren. Eine gute Anleitung ist hier .
Fügen Sie einen entfernten Zweig hinzu:
git Push Origin master:new_feature_name
Überprüfen Sie, ob alles in Ordnung ist (holen Sie Origin und listen Sie entfernte Zweige auf):
git fetch Origin
git branch -r
Erstellen Sie eine lokale Zweigstelle und verfolgen Sie die entfernte Zweigstelle:
git checkout -tb new_feature_name Origin/new_feature_name
Alles aktualisieren:
git pull
So erstellen Sie einen neuen Zweig, indem Sie von einem vorhandenen Zweig abzweigen
git checkout -b <new_branch>
und dann diesen neuen Zweig mit in das Repository verschieben
git Push -u Origin <new_branch>
Dadurch werden alle lokalen Festschreibungen erstellt und an einen neu erstellten Remote-Zweig gesendet. Origin/<new_branch>
edit Veraltet, benutze einfach git Push -u Origin $BRANCHNAME
Verwenden Sie git publish-branch
aus Williams verschiedene Git-Tools ( gitorious repo und clone ).
OK, kein Ruby, also - die Sicherheitsvorkehrungen ignorieren! - Nehmen Sie die letzten drei Zeilen des Skripts und erstellen Sie ein Bash-Skript, git-publish-branch
:
#!/bin/bash
REMOTE=$1 # Rewrite this to make it optional...
BRANCH=$2
# Uncomment the following line to create BRANCH locally first
#git checkout -b ${BRANCH}
git Push ${Origin} ${BRANCH}:refs/heads/${BRANCH} &&
git config branch.${BRANCH}.remote ${REMOTE} &&
git config branch.${BRANCH}.merge refs/heads/${BRANCH}
Führen Sie dann git-publish-branch REMOTENAME BRANCHNAME
aus, wobei REMOTENAME normalerweise Origin ist (Sie können das Skript so ändern, dass Origin als Standard verwendet wird usw.).
Verwenden Sie für GitLab-Versionen vor 1.7:
git checkout -b name_branch
(name_branch, ex: master
)
Gehen Sie wie folgt vor, um es in das Remote-Repository zu verschieben:
git Push -u Origin name_new_branch
(name_new_branch, Beispiel: feature
)
Ich habe einen Alias erstellt, damit beim Erstellen eines neuen Zweigs der Remote-Zweig entsprechend gepusht und verfolgt wird. Ich habe folgenden Teil in die .bash_profile
-Datei eingefügt:
# Create a new branch, Push to Origin and track that remote branch
publishBranch() {
git checkout -b $1
git Push -u Origin $1
}
alias gcb=publishBranch
sage: tippe einfach gcb thuy/do-sth-kool
mit thuy/do-sth-kool
ist mein neuer Filialname.
Aufbauend auf den Antworten hier habe ich diesen Prozess als einfaches Bash-Skript abgeschlossen, das natürlich auch als Git-Alias verwendet werden kann.
Der wichtige Zusatz für mich ist, dass ich vor dem Festschreiben aufgefordert werde, Komponententests durchzuführen, und standardmäßig den aktuellen Filialnamen übergebe.
$ git_Push_new_branch.sh
Have you run your unit tests yet? If so, pass OK or a branch name, and try again
usage: git_Push_new_branch {OK|BRANCH_NAME}
e.g.
git_Push_new_branch -> Displays Prompt reminding you to run unit tests
git_Push_new_branch OK -> Pushes the current branch as a new branch to the Origin
git_Push_new_branch MYBRANCH -> Pushes branch MYBRANCH as a new branch to the Origin
function show_help()
{
IT=$(cat <<EOF
Have you run your unit tests yet? If so, pass OK or a branch name, and try again
usage: git_Push_new_branch {OK|BRANCH_NAME}
e.g.
git_Push_new_branch.sh -> Displays Prompt reminding you to run unit tests
git_Push_new_branch.sh OK -> Pushes the current branch as a new branch to the Origin
git_Push_new_branch.sh MYBRANCH -> Pushes branch MYBRANCH as a new branch to the Origin
)
echo "$IT"
exit
}
if [ -z "$1" ]
then
show_help
fi
CURR_BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$1" == "OK" ]
then
BRANCH=$CURR_BRANCH
else
BRANCH=${1:-$CURR_BRANCH}
fi
git Push -u Origin $BRANCH