it-swarm.dev

Come spingere un nuovo ramo locale in un repository Git remoto e tracciarlo anch'io?

Voglio essere in grado di fare quanto segue:

  1. Creare un ramo locale basato su qualche altro ramo (remoto o locale) (tramite git branch o git checkout -b)

  2. Spingi il ramo locale nel repository remoto (pubblica), ma rendilo rintracciabile in modo che git pull e git Push funzionino immediatamente.

Come lo faccio?

Conosco --set-upstream in Git 1.7, ma si tratta di un'azione post-creazione. Voglio trovare un modo per apportare una modifica simile quando si spinge il ramo nel repository remoto.

3956
Roni Yaniv

In Git 1.7.0 e versioni successive, puoi effettuare il checkout di un nuovo ramo:

git checkout -b <branch>

Modifica i file, aggiungi e commetti. Quindi Spingi con -u (abbreviazione di --set-upstream) option:

git Push -u Origin <branch>

Git imposterà le informazioni di tracciamento durante il Push.

6188
Daniel Ruoso

Se non stai condividendo il tuo repository con altri, è utile per spingere tutti i tuoi rami verso il remoto, e --set-upstream localizzare correttamente per te:

git Push --all -u

(Non esattamente quello che l'OP chiedeva, ma questo one-liner è piuttosto popolare)

Se stai condividendo il tuo repository con gli altri questa non è una buona forma, perché intaserai il repository con tutti i tuoi rami sperimentali poco raccomandabili.

470
ErichBSchulz

Prima dell'introduzione di git Push -u, non esisteva l'opzione git Push per ottenere ciò che desideri. Hai dovuto aggiungere nuove istruzioni di configurazione.

Se crei un nuovo ramo usando:

$ git checkout -b branchB
$ git Push Origin branchB:branchB

È possibile utilizzare il comando git config per evitare di modificare direttamente il file .git/config.

$ git config branch.branchB.remote Origin
$ git config branch.branchB.merge refs/heads/branchB

Oppure puoi modificare manualmente il file .git/config per avere informazioni di tracciamento su questo ramo.

[branch "branchB"]
    remote = Origin
    merge = refs/heads/branchB
140
Lohrun

In poche parole, per creare un nuovo local branch, fare:

git branch <branch-name>

Per inviarlo a remote repository, fai:

git Push -u Origin <branch-name>
119
piyushmandovra

Una leggera variazione delle soluzioni già fornite qui:

  1. Creare un ramo locale basato su qualche altro ramo (remoto o locale):

    git checkout -b branchname
    
  2. Spingi il ramo locale nel repository remoto (pubblica), ma rendilo rintracciabile in modo che git pull e git Push funzionino immediatamente

    git Push -u Origin HEAD
    

    Usare HEAD è un "modo pratico per spingere il ramo corrente sullo stesso nome sul telecomando". Fonte: https://git-scm.com/docs/git-Push In termini Git, HEAD (in maiuscolo) è un riferimento alla parte superiore del ramo corrente (albero).

    L'opzione -u è solo l'abbreviazione di --set-setupstream. Questo aggiungerà un riferimento di tracciamento a monte per il ramo corrente. puoi verificarlo cercando nel tuo file .git/config:

     Enter image description here

78
bg17aw

Semplicemente

git Push -u Origin localBranch:remoteBranchToBeCreated

su un progetto già clonato.

Git crea un nuovo ramo chiamato remoteBranchToBeCreated sotto i miei commit che ho fatto in localBranch.

32
Arda

Suppongo che tu abbia già clonato un progetto come:

git clone http://github.com/myproject.git
  1. Quindi nella tua copia locale, crea un nuovo ramo e controllalo:

    git checkout -b <newbranch>
    
  2. Supponendo di aver creato un "git bare - init" sul tuo server e creato myapp.git, dovresti:

    git remote add Origin ssh://example.com/var/git/myapp.git
    git Push Origin master
    
  3. Successivamente, gli utenti dovrebbero essere in grado di

    git clone http://example.com/var/git/myapp.git
    

NOTA: Presumo che tu abbia il tuo server attivo e funzionante. Se non lo è, non funzionerà. Un buon how-to è qui .

AGGIUNTO

Aggiungi un ramo remoto:

git Push Origin master:new_feature_name

Verifica se tutto è in ordine (recupera l'origine e elenca i rami remoti):

git fetch Origin
git branch -r

Crea un ramo locale e traccia il ramo remoto:

git checkout -tb new_feature_name Origin/new_feature_name

Aggiorna tutto:

git pull
29
VP.

edit Non aggiornato, usa solo git Push -u Origin $BRANCHNAME


Usa git publish-branch da Git tools di William ( gitorious repo e clone ).

OK, niente Ruby, quindi - ignorando le precauzioni! - prendi le ultime tre righe dello script e crea uno script bash, 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}

Quindi esegui git-publish-branch REMOTENAME BRANCHNAME, dove REMOTENAME è di solito Origin (puoi modificare lo script per prendere Origin come default, ecc ...)

22
Tobias Kienzler

Per creare un nuovo ramo separandolo da un ramo esistente

git checkout -b <new_branch>

e poi Spingi questo nuovo ramo nel repository usando

git Push -u Origin <new_branch>

Questo crea e spinge tutti i commit locali a un ramo remoto appena creato Origin/<new_branch>

19
cptjack

Per la versione di GitLab precedente alla 1.7, utilizzare:

git checkout -b name_branch

(name_branch, ex: master)

Per inviarlo al repository remoto, fare:

git Push -u Origin name_new_branch

(name_new_branch, esempio: feature)

10
Fadid

Ho creato un alias in modo che ogni volta che creo un nuovo ramo, spinga e segua il ramo remoto di conseguenza. Inserisco il seguente blocco nel file .bash_profile:

# 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

Uso : basta digitare gcb thuy/do-sth-kool con thuy/do-sth-kool è il mio nuovo nome di ramo.

8
Thuy Trinh

Costruendo leggermente le risposte qui, ho trasformato questo processo in un semplice script di Bash, che potrebbe ovviamente essere usato anche come alias Git.

L'importante aggiunta a me è che questo mi spinge a eseguire i test unitari prima di eseguire il commit e passa il nome attuale del ramo per impostazione predefinita.

$ 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
2
Brad Parks