Je ne suis pas un git master, mais je travaille avec lui depuis un certain temps maintenant, avec plusieurs projets différents. Dans chaque projet, je peux toujours git clone [repository]
et à partir de là, toujours git pull
, tant que je n'ai pas de changements en suspens, bien sûr.
Récemment, j'ai dû revenir à une branche précédente, et je l'ai fait avec git checkout 4f82a29
. Quand j'étais à nouveau prêt à tirer, j'ai constaté que je devais remettre ma branche en maître. Maintenant, je ne peux pas tirer en utilisant une ligne droite, git pull
mais au lieu de cela, je dois spécifier git pull origin master
, ce qui est ennuyeux, et m'indique que je ne comprends pas bien ce qui se passe.
Qu'est-ce qui a changé qui ne me permet pas de faire une ligne droite git pull
sans spécifier l'origine master, et comment puis-je le changer?
MISE À JOUR:
-bash-3.1$ cat config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[branch "master"]
[remote "origin"]
url = [email protected]:user/project.git
fetch = refs/heads/*:refs/remotes/origin/*
MISE À JOUR 2: Pour être clair, je comprends que ma méthode d'origine était peut-être incorrecte, mais je dois corriger ce dépôt afin de pouvoir simplement l'utiliser à git pull
nouveau. Actuellement, git pull se traduit par:
-bash-3.1$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me either. Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull ').
See git-pull(1) for details on the refspec.
If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:
branch.master.remote =
branch.master.merge =
remote..url =
remote..fetch =
See git-config(1) for details.
Je peux dire git pull
quelle branche fusionner, et cela fonctionne correctement, mais git pull
ne fonctionne pas comme il le faisait à l'origine avant le mien git checkout
.
la source
Réponses:
Sous
[branch "master"]
, essayez d'ajouter ce qui suit au fichier de configuration Git du dépôt (.git/config
):Cela dit à Git 2 choses:
git pull
sur la branche principale, sans télécommande ni branche spécifiées, utilisez la télécommande par défaut (origine) et fusionnez les modifications de la branche principale distante.Je ne sais pas pourquoi cette configuration aurait été supprimée de votre configuration. Vous devrez peut-être également suivre les suggestions que d'autres personnes ont publiées, mais cela peut fonctionner (ou aider au moins).
Si vous ne souhaitez pas modifier le fichier de configuration à la main, vous pouvez utiliser l'outil de ligne de commande à la place:
la source
.git/config
).$ git config branch.master.remote origin ; git config branch.master.merge refs/heads/master
place.Si vous préférez, vous pouvez définir ces options via la ligne de commande (au lieu de modifier le fichier de configuration) comme suit:
Ou, si vous êtes comme moi et que vous souhaitez que ce soit la valeur par défaut dans tous vos projets, y compris ceux sur lesquels vous pourriez travailler à l'avenir, ajoutez-le en tant que paramètre de configuration global:
la source
.git
dans lequel git semble conserver le code de hachage dumaster
commit en cours.Cela ajoutera les informations suivantes à votre
config
fichier:Si vous en avez,
branch.autosetuprebase = always
il ajoutera également:la source
fatal: Not a valid object name: 'origin/master'.
même siorigin
c'est une télécommande valide, etmaster
existe, comme d'habitude, dans les deux dépôts.git branch --set-upstream-to=origin/master master
.J'ai du mal à me souvenir de l'exact
git config
ou desgit branch
arguments comme dans les réponses de mipadi et Casey, donc j'utilise ces 2 commandes pour ajouter la référence en amont:Cela ajoutera les mêmes informations à votre .git / config, mais je trouve cela plus facile à retenir.
la source
Git pull combine deux actions: récupérer de nouvelles validations à partir du référentiel distant dans les branches suivies, puis les fusionner dans votre branche actuelle .
Lorsque vous avez extrait un commit particulier, vous n'avez pas de branche actuelle, vous n'avez que HEAD pointant vers le dernier commit que vous avez fait. N'a
git pull
donc pas tous ses paramètres spécifiés. Voilà pourquoi cela n'a pas fonctionné.Sur la base de vos informations mises à jour, ce que vous essayez de faire est de rétablir votre dépôt à distance. Si vous connaissez le commit qui a introduit le bogue, la manière la plus simple de gérer cela est d'
git revert
enregistrer un nouveau commit qui annule le commit de buggy spécifié:Puisque c'est votre serveur que vous souhaitez changer, je suppose que vous n'avez pas besoin de réécrire l'historique pour masquer la validation du buggy.
Si le bogue a été introduit dans une validation de fusion, cette procédure ne fonctionnera pas. Voir Comment-annuler une fusion défectueuse .
la source
Il existe également un moyen de configurer Git, il extrait et pousse toujours la branche distante équivalente vers la branche actuellement extraite de la copie de travail. Cela s'appelle une branche de suivi que git ready recommande de définir par défaut .
Pour le référentiel suivant au-dessus du répertoire de travail actuel:
Pour tous les référentiels Git, qui ne sont pas configurés autrement:
Une sorte de magie, à mon humble avis, mais cela pourrait aider dans les cas où la branche spécifique est toujours la branche actuelle .
Lorsque vous avez
branch.autosetupmerge
définitrue
et extrait une branche pour la première fois, Git vous explique comment suivre la branche distante correspondante:Git poussera alors automatiquement vers cette branche correspondante:
la source
Ne voulant pas modifier mon fichier de configuration git, j'ai suivi les informations dans le post de @ mipadi et utilisé:
la source
Votre question immédiate de savoir comment le faire tirer maître, vous devez faire ce qu'il dit. Spécifiez la spécification de référence à extraire dans votre configuration de branche.
la source
Je voulais juste ajouter quelques informations, nous pouvons vérifier ces informations si elles
git pull
se réfèrent automatiquement à une branche ou non.Si vous exécutez la commande
git remote show origin
,, (en supposant que l'origine est le nom abrégé de remote), git affiche ces informations, qu'il existegit pull
ou non une référence par défaut .Vous trouverez ci-dessous un exemple de sortie (extrait de la documentation git).
Veuillez noter la partie où il apparaît, branche locale configurée pour git pull.
Dans ce cas,
git pull
fera référence àgit pull origin master
Initialement, si vous avez cloné le référentiel, en utilisant git clone, ces choses sont automatiquement prises en charge. Mais si vous avez ajouté une télécommande manuellement à l'aide de git remote add, ceux-ci sont absents de la configuration git. Si tel est le cas, alors la partie où il affiche "Branche locale configurée pour 'git pull':", serait manquante dans la sortie de
git remote show origin
.Les prochaines étapes à suivre si aucune configuration n'existe pour
git pull
, ont déjà été expliquées par d'autres réponses.la source