it-swarm.com.de

Wie schiebe ich einen neuen lokalen Zweig in ein entferntes Git-Repository und verfolge ihn auch?

Ich möchte in der Lage sein, Folgendes zu tun:

  1. Erstellen Sie einen lokalen Zweig basierend auf einem anderen (entfernten oder lokalen) Zweig (über git branch oder git checkout -b)

  2. Ü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.

4073
Roni Yaniv

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.

6314
Daniel Ruoso

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.

475
ErichBSchulz

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
146
Lohrun

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>
123
piyushmandovra

Eine kleine Variation der hier bereits angegebenen Lösungen:

  1. Erstellen Sie eine lokale Verzweigung basierend auf einer anderen (entfernten oder lokalen) Verzweigung:

    git checkout -b branchname
    
  2. Ü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:

    Enter image description here

82
bg17aw

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.

40
Arda

Ich nehme an, Sie haben bereits ein Projekt wie das folgende geklont:

git clone http://github.com/myproject.git
  1. Erstellen Sie dann in Ihrer lokalen Kopie einen neuen Zweig und checken Sie ihn aus:

    git checkout -b <newbranch>
    
  2. 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
    
  3. 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 .

HINZUGEFÜGT

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
30
VP.

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>

23
cptjack

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.).

23
Tobias Kienzler

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)

13
Fadid

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.

9
Thuy Trinh

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

git_Push_new_branch.sh

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
5
Brad Parks