web-dev-qa-db-fra.com

Comment puis-je transférer une nouvelle branche locale vers un référentiel Git distant et la suivre également?

Je veux pouvoir faire ce qui suit:

  1. Créer une branche locale basée sur une autre branche (distante ou locale) (via git branch ou git checkout -b)

  2. Poussez la branche locale dans le référentiel distant (publier), mais rendez-la traçable afin que git pull et git Push fonctionnent immédiatement.

Comment je fais ça?

Je connais --set-upstream dans Git 1.7, mais il s’agit d’une action post-création. Je souhaite trouver un moyen d’apporter un changement similaire lors du transfert de la branche vers le référentiel distant.

4073
Roni Yaniv

Dans Git 1.7.0 et versions ultérieures, vous pouvez extraire une nouvelle branche:

git checkout -b <branch>

Editez les fichiers, ajoutez et validez. Puis Appuyez avec le -u (abréviation de --set-upstream) option:

git Push -u Origin <branch>

Git va configurer les informations de suivi pendant le Push.

6314
Daniel Ruoso

Si vous ne partagez pas votre dépôt avec d’autres, cela est utile pour pousser tous vos branches sur la télécommande et --set-upstream effectuer le suivi correctement pour vous:

git Push --all -u

(Pas exactement ce que demandait le PO, mais ce one-liner est très populaire)

Si vous partagez votre repo avec d'autres personnes, ce n'est pas vraiment une bonne forme, car vous allez l'encrasser avec toutes vos branches expérimentales douteuses.

475
ErichBSchulz

Avant l'introduction de git Push -u, il n'y avait pas d'option git Push pour obtenir ce que vous désirez. Vous deviez ajouter de nouvelles instructions de configuration.

Si vous créez une nouvelle branche en utilisant:

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

Vous pouvez utiliser la commande git config pour éviter de modifier directement le fichier .git/config.

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

Ou vous pouvez éditer manuellement le fichier .git/config pour qu'il contienne des informations de suivi sur cette branche.

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

En termes simples, pour créer une nouvelle branche locale, faites:

git branch <branch-name>

Pour le placer dans le référentiel distant, faites:

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

Une légère variation des solutions déjà données ici:

  1. Créez une branche locale basée sur une autre branche (distante ou locale):

    git checkout -b branchname
    
  2. Poussez la branche locale dans le référentiel distant (publier), mais rendez-la traçable afin que git pull et git Push fonctionnent immédiatement

    git Push -u Origin HEAD
    

    Utiliser HEAD est un "moyen pratique de pousser la branche actuelle vers le même nom sur la télécommande". Source: https://git-scm.com/docs/git-Push En termes Git, HEAD (en majuscule) est une référence au sommet de la branche en cours ( arbre).

    L'option -u n'est que l'abréviation de --set-setupstream. Cela ajoutera une référence de suivi en amont pour la branche actuelle. vous pouvez le vérifier en consultant votre fichier .git/config:

    Enter image description here

82
bg17aw

Je fais simplement

git Push -u Origin localBranch:remoteBranchToBeCreated

sur un projet déjà cloné.

Git crée une nouvelle branche nommée remoteBranchToBeCreated sous les commits que j'ai faits dans localBranch.

40
Arda

Je suppose que vous avez déjà cloné un projet tel que:

git clone http://github.com/myproject.git
  1. Ensuite, dans votre copie locale, créez une nouvelle branche et vérifiez-la:

    git checkout -b <newbranch>
    
  2. En supposant que vous ayez créé un "git bare -init" sur votre serveur et créé le fichier myapp.git, vous devriez:

    git remote add Origin ssh://example.com/var/git/myapp.git
    git Push Origin master
    
  3. Après cela, les utilisateurs devraient pouvoir

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

REMARQUE: Je suppose que votre serveur est opérationnel. Si ce n'est pas le cas, cela ne fonctionnera pas. Un bon tutoriel est ici .

AJOUTÉE

Ajouter une branche distante:

git Push Origin master:new_feature_name

Vérifiez si tout va bien (chercher Origin et lister les branches distantes):

git fetch Origin
git branch -r

Créez une branche locale et suivez la branche distante:

git checkout -tb new_feature_name Origin/new_feature_name

Tout mettre à jour:

git pull
30
VP.

Pour créer une nouvelle branche en se séparant d'une branche existante

git checkout -b <new_branch>

puis Poussez cette nouvelle branche dans le référentiel à l'aide de

git Push -u Origin <new_branch>

Cela crée et envoie tous les commits locaux dans une branche distante nouvellement créée Origin/<new_branch>

23
cptjack

edit périmé, il suffit d'utiliser git Push -u Origin $BRANCHNAME


Utilisez git publish-branch de divers outils de Git de William ( rapport de gestion et clone ).

OK, pas de Ruby, alors - en ignorant les garanties! - prenez les trois dernières lignes du script et créez un 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}

Ensuite, lancez git-publish-branch REMOTENAME BRANCHNAME, où REMOTENAME est généralement l’origine (vous pouvez modifier le script pour prendre l’origine par défaut, etc.).

23
Tobias Kienzler

Pour les versions de GitLab antérieures à 1.7, utilisez:

git checkout -b name_branch

(name_branch, ex: master)

Pour le placer dans le référentiel distant, procédez comme suit:

git Push -u Origin name_new_branch

(name_new_branch, exemple: feature)

13
Fadid

J'ai créé un alias pour que chaque fois que je crée une nouvelle branche, il envoie et suit la branche distante en conséquence. J'ai mis le morceau suivant dans le fichier .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

sage: tapez juste gcb thuy/do-sth-kool avec thuy/do-sth-kool est mon nouveau nom de branche.

9
Thuy Trinh

En me basant légèrement sur les réponses fournies ici, j’ai résumé ce processus en un simple script Bash, qui pourrait bien sûr être également utilisé comme alias Git.

L’important, c’est que cela m’incite à exécuter des tests unitaires avant de valider et à transmettre le nom de la branche actuelle par défaut.

$ 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