Dans Git, quelle est la différence entre origine / maître et maître d'origine?


290

Je sais, origine est un terme pour le référentiel distant et maître est la branche là-bas.

J'oublie volontairement le "contexte" ici et j'espère que la réponse ne devrait pas dépendre du contexte. Donc, dans les lignes de commande git, quelle est la différence entre origin / master et origin master . Existe-t-il un moyen non ambigu de comprendre quand utiliser origin / master et quand dois-je utiliser origin master ?


Réponses:


390

Il y a en fait trois choses ici: origin masterc'est deux choses distinctes, et origin/masterc'est une chose. Trois choses au total.

Deux branches:

  • master est une succursale locale
  • origin/masterest une branche distante (qui est une copie locale de la branche nommée "master" sur la télécommande nommée "origin")

Une télécommande:

  • origin est une télécommande

Exemple: tirer en deux étapes

Étant donné qu'il origin/masters'agit d'une branche, vous pouvez la fusionner. Voici une traction en deux étapes:

Première étape, récupérez à masterpartir de la télécommande origin. La masterbranche sur originsera récupérée et la copie locale sera nommée origin/master.

git fetch origin master

Ensuite, vous fusionnez origin/masterdans master.

git merge origin/master

Ensuite, vous pouvez repousser vos nouvelles modifications mastervers origin:

git push origin master

Plus d'exemples

Vous pouvez récupérer plusieurs branches par nom ...

git fetch origin master stable oldstable

Vous pouvez fusionner plusieurs branches ...

git merge origin/master hotfix-2275 hotfix-2276 hotfix-2290

5
La première partie est vraiment utile. Je ne pouvais pas connecter comment Plus d'exemples, en particulier celui de fusion, sont applicables. Merci d'avoir répondu.
Senthil Kumaran

1
... parce que lorsque je "git checkout origin / master" je me retrouve dans un état de tête détaché. Si j'ai en effet une copie locale de la branche maître distante, pourquoi ne puis-je pas travailler et valider et y ajouter? Ou peut-être que je peux, mais pourquoi est-il détaché?
stu

3
Vous ne pouvez vous engager que dans une branche locale, donc lorsque vous extrayez une branche distante, vous obtenez une "tête détachée". Bien sûr, c'est une copie locale d'une branche distante, mais c'est toujours une branche distante. Il n'y a aucune règle selon laquelle "maître" est lié à "origine / maître", ils peuvent être complètement différents.
Dietrich Epp

7
@ Jwan622 "origine est une télécommande" ... "origine" n'est qu'un nom, vous pouvez choisir n'importe quel nom pour les télécommandes mais "origine" est le nom par défaut. Une télécommande est un référentiel ailleurs. Il peut s'agir de GitHub ou d'un autre ordinateur ou même d'un autre emplacement sur le même ordinateur.
Dietrich Epp du

2
@ Jwan622: "git remote add" est une commande qui crée une nouvelle télécommande. "origine" est le nom que la télécommande ajoute. Puisque "origine" n'est qu'un nom, vous pouvez choisir un nom différent si vous le souhaitez. Par exemple, git remote add home my-server:projects/my-projectajoute une télécommande nommée "home". Vous pouvez vous référer à la documentation: git-scm.com/docs/git-remote
Dietrich Epp

16

origin/masterest une entité (car ce n'est pas une branche physique) représentant l'état de la masterbranche sur la télécommande origin.

origin masterest la branche masterde la télécommande origin.

Nous avons donc ceux-ci:

  • origine / maître (une représentation ou un pointeur vers la branche distante)
  • master - ( branche réelle )
  • <Your_local_branch> ( branche réelle )
  • <Your_local_branch2> ( branche réelle )
  • <Your_local_branch3> ( branche réelle )

Exemple (en succursale locale master):

git fetch # get current state of remote repository
git merge origin/master # merge state of remote master branch into local branch
git push origin master # push local branch master to remote branch master

24
C'est incorrect ... ce origin mastern'est pas une branche ... c'est en fait deux choses distinctes, "origine" (une télécommande) et "maître" (une branche locale).
Dietrich Epp

L'état de la branche maître distante est présent localement, non?
Senthil Kumaran

4
oui ceci est incorrect origin/masterest la branche principale distante. La branche locale n'est que le maître.
Aniket Thakur

5

origin/masterest la masterbranche distante

Habituellement, après avoir fait un git fetch originpour apporter toutes les modifications du serveur, vous feriez un git rebase origin/master, pour rebaser vos modifications et déplacer la branche vers le dernier index. Ici, origin/masterfait référence à la branche distante, car vous dites essentiellement à GIT de rebaser la origin/masterbranche sur la branche actuelle.

Vous utiliseriez origin masterlors de la poussée, par exemple. git push origin masterindique simplement à GIT de pousser vers le référentiel distant la masterbranche locale .


1
Cela semble en fait être le plus proche de ce que OP recherchait - origin masterdire au logiciel de faire quelque chose avec tout ce qui se trouve sur «master» dans le référentiel «origin». origin/masterest une référence de la même manière f3a4d5ou HEADest.
Nemesarial

4

origin est un nom pour l'url de git distant. Il peut y avoir beaucoup plus d'exemples de télécommandes ci-dessous.

bangalore => bangalore.example.com:project.git

boston => boston.example.com:project.git

en ce qui concerne l'origine / master (exemple bangalore / master), il s'agit d'un pointeur vers la validation "master" sur le site de bangalore . Vous le voyez dans votre clone.

Il est possible que Bangalore à distance ait avancé depuis que vous avez fait "chercher" ou "tirer"


2

Étant donné que vous pouvez basculer vers origin/master(bien qu'à l'état détaché) tout en ayant votre câble réseau débranché, il doit s'agir d'une représentation locale de la masterbranche sur origin.


Dans les réponses ci-dessus et ci-dessous, les gens disent que l'origine / maître est la branche maître distante. Votre réponse est en quelque sorte en contradiction avec ce qu'ils disent. Veuillez expliquer.
Luna Lovegood
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.