Je veux pouvoir faire ce qui suit:
Créer une branche locale basée sur une autre branche (distante ou locale) (via git branch
ou git checkout -b
)
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.
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.
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.
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
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>
Une légère variation des solutions déjà données ici:
Créez une branche locale basée sur une autre branche (distante ou locale):
git checkout -b branchname
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:
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
.
Je suppose que vous avez déjà cloné un projet tel que:
git clone http://github.com/myproject.git
Ensuite, dans votre copie locale, créez une nouvelle branche et vérifiez-la:
git checkout -b <newbranch>
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
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 .
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
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>
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.).
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
)
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.
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
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