Mon collègue et moi travaillons sur le même référentiel que nous avons subdivisé techniquement en deux branches pour des projets différents, mais elles ont des similitudes et nous souhaitons parfois revenir au * master
à partir du branch
.
Cependant, j'ai le branch
. Ma question est la suivante: comment mon collègue peut-il extraire cette branche spécifiquement?
Un git clone
de la pension ne semble pas créer les branches localement pour lui, bien que je puisse les voir vivre sans encombre après un Push de mon côté.
De plus, lorsque j'ai créé la branche, j’ai fait -b checkout
. Vous ne savez pas si cela fait une grande différence?
$ git branch -r
Origin/HEAD -> Origin/master
Origin/daves_branch
Origin/discover
Origin/master
$ git fetch Origin discover
$ git checkout discover
Ce sont les commandes que j'ai exécutées. Mais cela ne fonctionne vraiment pas.
Je souhaite pouvoir vérifier cette branche, puis envoyer et retransmettre uniquement les modifications de branches de divers collaborateurs ou postes de travail .
Vous devez créer une branche locale qui suit une branche distante. La commande suivante va créer une branche locale nommée daves_branch , en suivant la branche distante Origin/daves_branch . Lorsque vous appuyez sur vos modifications, la branche distante sera mise à jour.
Pour les versions les plus récentes de git:
git checkout --track Origin/daves_branch
--track
est un raccourci pour git checkout -b [branch] [remotename]/[branch]
où [nom de domaine] est Origine dans ce cas et [branche] est deux fois identique, daves_branch dans ce cas.
Pour git 1.5.6.5, vous en aviez besoin:
git checkout --track -b daves_branch Origin/daves_branch
Pour git 1.7.2.3 et supérieur, cela suffit (peut-être commencé plus tôt mais c'est la confirmation la plus ancienne que j'ai pu trouver rapidement):
git checkout daves_branch
Notez qu'avec les versions récentes de git, cette commande ne créera pas de branche locale et vous placera dans un état "détaché". Si vous voulez une branche locale, utilisez l'option --track
. Tous les détails ici: http://git-scm.com/book/fr/v2/Git-Branching-Remote-Branches#Tracking-Branches
J'ai utilisé fetch
suivi de checkout
...
git fetch <remote> <rbranch>:<lbranch>
git checkout <lbranch>
... où <rbranch>
est la branche distante ou la référence de la source et <lbranch>
est la non encore existante branche locale ou référence de la destination que vous souhaitez suivre et que vous souhaitez probablement nommer de la même manière que la branche distante ou la référence de la source. Ceci est expliqué sous options dans l'explication de <refspec>
.
Git est si intelligent qu'il termine automatiquement la première commande si je onglet après les premières lettres de la branche distante. IE: Je n'ai même pas besoin de nommer la branche locale, Git copie automatiquement le nom de la branche distante pour moi. Merci Git!
Aussi comme la réponse dans ce SO post similaire indique que, si vous ne nommez pas la branche locale dans fetch
, vous pouvez toujours la créer lorsque vous extrayez-la en utilisant le -b
drapeau. IE: git fetch <remote> <branch>
suivi de git checkout -b <branch> <remote>/<branch>
fait exactement la même chose que ma réponse initiale. Et évidemment, si votre référentiel a une seule télécommande, vous pouvez simplement faire git checkout <branch>
après fetch
et il créera une branche locale pour vous. EG: Vous venez de cloner un référentiel et souhaitez extraire des branches supplémentaires de la télécommande.
Je crois qu'une partie de la documentation pour fetch
a peut-être été copiée telle quelle pull
. En particulier, la section sur <refspec>
dans options est la même. Cependant, je ne crois pas que fetch
sera jamais merge
, de sorte que si vous laissez le côté de destination du deux-points vide, fetch
ne devrait rien faire .
REMARQUE: git fetch <remote> <refspec>
est l'abréviation de git fetch <remote> <refspec>:
qui ne ferait donc rien, mais git fetch <remote> <tag>
est identique à git fetch <remote> <tag>:<tag>
qui doit copier le <tag>
distant.
Je suppose que cela n’est utile que si vous souhaitez copier une branche distante localement, sans nécessairement le vérifier immédiatement. Sinon, je voudrais maintenant utiliser la réponse acceptée ci-dessus , ce qui est expliqué en détail dans la première section de description de la commande et plus tard dans la section options sous l'explication de --track
, puisqu'il s'agit d'une ligne. Eh bien ... une sorte de ligne 1, parce que vous encore devez exécuter git fetch <remote>
en premier.
FYI: L’ordre du <refspecs>
(source: destination) explique la bizarre méthode antérieure à Git-1.7 pour supprimer des branches distantes . IE: rien pousser dans le refspec de destination.
Si vous essayez de "valider" une nouvelle branche distante (qui n'existe que sur la télécommande, mais pas localement), voici ce dont vous avez besoin:
git fetch Origin
git checkout --track Origin/<remote_branch_name>
Cela suppose que vous voulez récupérer Origin. Sinon, remplacez Origin par votre nom distant.
Pour utiliser myBranch qui existe à distance et non localement, cela a fonctionné pour moi:
git fetch --all
git checkout myBranch
J'ai eu ce message:
Branch myBranch set up to track remote branch myBranch from Origin
Switched to a new branch 'myBranch'
Utilisez git branch -a
(branches locales et distantes) ou git branch -r
(uniquement les branches distantes) pour voir toutes les télécommandes et leurs branches. Vous pouvez ensuite effectuer un git checkout -t remotes/repo/branch
sur la télécommande et créer une branche locale.
Il existe également une commande git ls-remote pour afficher toutes les références et les balises de cette télécommande.
Le titre et la question sont confus:
Si la question est de savoir comment faire fonctionner une branche distante ou comment git checkout une branche distante, une solution plus simple consiste à:
Avec git (> = 1.6.6), vous pouvez utiliser:
git checkout <branch_name>
Si le fichier local <branch_name>
n’est pas trouvé, mais qu’il existe une branche de suivi dans exactement une télécommande avec un nom correspondant, considérez comme équivalent à:
git checkout -b <branch_name> --track <remote>/<branch_name>
voir la documentation de git checkout
Pour ton ami:
$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'
git checkout -b serverfix Origin/serverfix
C’est une opération assez commune pour que git fournisse le raccourci --track:
git checkout --track Origin/serverfix
En fait, cela est si courant qu’il existe même un raccourci pour ce raccourci. Si le nom de la branche que vous essayez de commander (a) n’existe pas et que (b) correspond exactement à un nom sur une seule télécommande, Git créera une branche de suivi pour vous:
git checkout serverfix
Pour configurer une branche locale avec un nom différent de celui de la branche distante, vous pouvez facilement utiliser la première version avec un nom de branche local différent:
git checkout -b sf Origin/serverfix
Maintenant, votre filiale locale sf tirera automatiquement de Origin/serverfix.
Source: Pro Git 2nd Edition, écrit par Scott Chacon et Ben Straub (coupé pour la lisibilité)
Avec cette simple commande:
git checkout -b 'your_branch' Origin/'remote branch'
La façon la plus simple de le faire, du moins pour moi:
git fetch Origin <branchName>
Ce qui m'a aidé était
1) Pour afficher toutes les branches distantes disponibles (par exemple, 'nom-branche-distante')
git branch -r
2) Créer une branche locale à l'aide d'un nom de branche distante
git fetch && git checkout 'remote-branch-name'
Vous pouvez aussi chercher et extraire la branche distante d'un coup: -
git fetch && git checkout the-branch-name
git fetch
git branch -r
git checkout <branch_name>
J'ai tapé $
git checkout <branch_name>
et j'ai
Branch <branch_name> set up to track remote branch <branch_name> from Origin.
Switched to a new branch '<branch_name>'
Pour récupérer une branche qui existe à distance, le moyen le plus simple est de:
git fetch Origin
git checkout branchName
Vous pouvez voir s'il existe déjà à distance avec:
git branch -r
Cela récupérera la branche distante chez votre correspondant et suivra automatiquement la branche distante.
Il vous est parfois demandé de ne pas manipuler la branche principale et de ne travailler que sur la branche distante (comme on me l'a demandé). Donc, tout ce dont vous avez besoin est la branche distante.
Donc, pour cloner la branche distante seule (sans le maître), faites ceci
git clone url --branch remote_branch_name
où remote_branch_name est le nom de la branche distante
Par exemple,
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15
Cela garantira que vous clonez la branche distante sur votre branche locale avec le nom de la branche distante.
Maintenant, si vous validez votre code et Push, le code sera soumis à cette seule branche.
git fetch --all & git checkout <branch name>
Disons que votre télécommande est [email protected] et que vous voulez sa branche random_branch. Le processus devrait être le suivant:
Commencez par vérifier la liste de vos télécommandes par
git remote -v
Si vous n'avez pas la télécommande [email protected] dans la sortie de la commande ci-dessus, vous l'ajouteriez par
git remote add xyz [email protected]
git fetch xyz
git checkout -b my_copy_random_branch xyz/random_branch
git branch -a
La branche locale my_copy_random_branch suivrait la branche random_branch de votre télécommande.
Je veux vous donner la commande oneliner pour récupérer toutes les branches distantes sur votre réseau local et basculer vers votre branche locale nouvellement créée souhaitée:
git fetch && git checkout discover
après avoir exécuté la commande ci-dessus, vous obtiendrez le message ci-dessous:
Switched to a new branch 'discover'
Branch discover set up to track remote branch discover from Origin.
les états de la première ligne qui sont passés à Nouvelle branche - pourquoi new? il est déjà là dans la télécommande!.
Mais en réalité, vous devez également la créer localement, la branche est extraite de l'index distant et créée localement pour vous.
Ici discover
est une nouvelle branche créée à partir de la branche distante de votre référentiel discover
.
Mais la deuxième ligne donne plus d’informations que la première qui nous dit que:
notre branche est configurée jusqu'à suivre une branche distante avec le même nom.
Bien que git fetch
récupère toutes les branches en local Mais si vous exécutez git branch
après cela, vous ne verrez que master
branche en local pourquoi?
parce que pour chaque branche distante, vous devez la créer localement aussi, pour la suivre comme git checkout <branchname>
comme nous l'avons fait dans l'exemple ci-dessus.
après avoir exécuté la commande git checkout
, vous pouvez exécuter git branch
et vous pouvez maintenant voir la branche:
essayez simplement
$ git pull Origin votre_nom_branch
git fetch && git checkout <your friend's branch name>
devrait faire l'affaire
Les étapes sont les suivantes;
git fetch Origin
ou git fetch --all
, toutes les branches distantes seront récupérées sur votre réseau local, puis vous pourrez utiliser la deuxième option.
git checkout --track Origin/<The_remote_branch you want to switch over>
Puis travaillez sur cette branche et vous pourrez vérifier si vous y êtes ou non en tapant
git branch
Il affiche la branche dans laquelle vous vous trouvez actuellement.
Si vous connaissez déjà votre branche distante, alors ...
git remote
=> One
=> Two
et vous connaissez le nom de la succursale que vous souhaitez commander ex. br1.2.3.4 alors faites
git fetch One
=> returns all meta data of remote i.e. the branch name in question.
il ne reste plus qu'à passer à la caisse
git checkout br.1.2.3.4
Ensuite, créez de nouvelles branches.
si vous souhaitez aller chercher toutes les branches distantes, veuillez simplement taper
git fetch --all
J'espère que cela aidera quelqu'un d'autre à voir toutes les branches distantes.
Vérifiez votre .git/config
, en particulier quel suivi est présent sur fetch pour cette télécommande.
[remote "randomRemote"]
url = [email protected]:someUser/someRepo.git
fetch = +refs/heads/*:refs/remotes/randomRemote/*
Si heads/*
pointe sur randomRemote/*
, lorsque vous exécutez git fetch randomRemote
, toutes les branches seront récupérées. Ensuite, vous pouvez simplement vérifier cette branche.
Autrement,
Vous devez ajouter des branches distantes au suivi à l'aide de cette option. Vérifiez votre .git/config
après l'avoir exécuté. Tu comprendras. git set-branches distantes --add randomRemote randomBranch
Exécutez git fetch randomRemote
. Cela va chercher la branche distante.
Maintenant vous pouvez lancer git checkout randomBranch
Si vous avez un référentiel cloné avec --depth 1, la plupart des commandes répertoriées ne fonctionneront pas. Par exemple voir ici
% git clone --depth 1 https://github.com/repo/code
Cloning into 'code'...
cd code
remote: Counting objects: 1778, done.
remote: Compressing objects: 100% (1105/1105), done.
remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
Resolving deltas: 100% (87/87), done.
Checking connectivity... done.
Checking out files: 100% (1215/1215), done.
% cd code
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
% git fetch Origin other_branch
remote: Counting objects: 47289, done.
remote: Compressing objects: 100% (15906/15906), done.
remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
Resolving deltas: 100% (30151/30151), completed with 362 local objects.
From https://github.com/repo/code
* branch other_branch-> FETCH_HEAD
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
%
Dans ce cas, je referais le rapport, mais il existe peut-être d'autres techniques, par exemple. le clone peu profond de git (clone --depth) manque des branches distantes
git branch <name> --track Origin/<name>
Vous utilisez 'git pull' pour séparer vos branches. Je vais utiliser des noms de référents et de branches pour vous aider, car 'lbranch' et 'rbranch' sont difficiles à déchiffrer.
Utilisons:
Vous, ou n'importe quel collègue, pouvez exécuter ceci pour ne tirer que votre branche, quel que soit le nombre de branches:
git init git pull [email protected]: mon équipe/tlc daves_branch: réfs/télécommandes/origine/daves_branch
Une simple commande - "git checkout remote_branch_name" vous aidera à créer une branche locale contenant toutes les modifications apportées à la branche distante.