Je ne suis pas un maître git, mais je travaille dessus depuis un certain temps, avec plusieurs projets différents. Dans chaque projet, j'ai toujours git clone [repository]
et à partir de là, je peux toujours git pull
, tant que je n'ai pas de modifications en attente, bien sûr.
Récemment, j'ai dû revenir à une branche précédente, avec git checkout 4f82a29
. Lorsque j'étais à nouveau prêt à tirer, j'ai découvert que je devais régler ma branche sur maître. Maintenant, je ne peux pas tirer avec un git pull
droit, mais plutôt spécifier git pull Origin master
, ce qui est gênant et m'indique que je ne comprends pas tout à fait ce qui se passe.
Qu'est-ce qui a changé et qui ne me permet pas de faire une suite git pull
sans spécifier Origin Master, et comment puis-je le modifier?
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/*
UPDATE 2: Pour être clair, je comprends que ma méthode d'origine était peut-être incorrecte, mais je dois corriger ce dépôt pour pouvoir simplement utiliser à nouveau git pull
. Actuellement, git pull résulte en:
-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 auparavant. git checkout
.
Sous [branch "master"]
, essayez d'ajouter ce qui suit dans le fichier de configuration Git du référentiel (.git/config
):
[branch "master"]
remote = Origin
merge = refs/heads/master
Cela dit à Git 2 choses:
git pull
sur la branche principale, sans aucune branche distante ni spécifiée, utilisez la valeur distante par défaut (Origin) et fusionnez les modifications à partir de la branche principale distante.Je ne sais pas pourquoi cette configuration aurait été retirée de votre configuration, cependant. Vous devrez peut-être aussi suivre les suggestions que d'autres personnes ont posté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:
$ git config branch.master.remote Origin
$ git config branch.master.merge refs/heads/master
Si vous préférez, vous pouvez définir ces options via la ligne de commande (au lieu d’éditer le fichier de configuration) comme suit:
$ git config branch.master.remote Origin
$ git config branch.master.merge refs/heads/master
Ou, si vous êtes comme moi et que vous voulez que ce soit la valeur par défaut pour tous vos projets, y compris ceux sur lesquels vous pourriez travailler à l'avenir, ajoutez-le en tant que paramètre de configuration global:
$ git config --global branch.master.remote Origin
$ git config --global branch.master.merge refs/heads/master
git branch --set-upstream master Origin/master
Cela ajoutera les informations suivantes à votre fichier config
:
[branch "master"]
remote = Origin
merge = refs/heads/master
Si vous avez branch.autosetuprebase = always
alors il ajoutera également:
rebase = true
J'ai du mal à me souvenir des arguments exacts git config
ou git branch
comme dans les réponses de mipadi et de Casey. J'ai donc utilisé ces 2 commandes pour ajouter la référence en amont:
git pull Origin master
git Push -u Origin master
Cela ajoutera les mêmes informations à votre fichier .git/config, mais je trouve qu'il est plus facile à retenir.
( Git pull combine deux actions - extraire de nouveaux commits du référentiel distant dans les branches suivies, puis les fusionner en 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 effectué. Donc, git pull
n'a pas tous ses paramètres spécifiés. C'est pourquoi cela n'a pas fonctionné.
En fonction de vos informations mises à jour, vous essayez de restaurer votre référentiel à distance. Si vous connaissez le commit qui a introduit le bogue, le moyen le plus simple de le gérer consiste à utiliser git revert
qui enregistre un nouveau commit qui annule le commit buggy spécifié:
$ git checkout master
$ git reflog #to find the SHA1 of buggy commit, say b12345
$ git revert b12345
$ git pull
$ git Push
Étant donné que c'est votre serveur que vous souhaitez modifier, 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 inverser une fusion défectueuse .
Il y a aussi un moyen de configurer Git, donc, il tire et pousse toujours la branche distante équivalente vers la branche actuellement extraite vers la copie de travail. C'est ce qu'on appelle une branche de suivi qui git ready recommande le réglage par défaut .
Pour le prochain référentiel au-dessus du répertoire de travail actuel:
git config branch.autosetupmerge true
Pour tous les référentiels Git, qui ne sont pas configurés autrement:
git config --global branch.autosetupmerge true
Type de magie, à mon humble avis, mais cela pourrait aider dans les cas où le branche spécifique est toujours la branche actuelle.
Quand vous avez branch.autosetupmerge
réglé sur true
et que vous vérifiez une branche pour la première fois, Git vous expliquera comment suivre la branche distante correspondante:
(master)$ git checkout gh-pages
Branch gh-pages set up to track remote branch gh-pages from Origin.
Switched to a new branch 'gh-pages'
Git va ensuite pousser automatiquement vers cette branche correspondante:
(gh-pages)$ git Push
Counting objects: 8, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 1003 bytes, done.
Total 6 (delta 2), reused 0 (delta 0)
To [email protected]:bigben87/webbit.git
1bf578c..268fb60 gh-pages -> gh-pages
Ne voulant pas éditer mon fichier de configuration git, j'ai suivi l'info dans le post de @ mipadi et utilisé:
$ git pull Origin master
Votre question immédiate sur la façon de tirer le maître, vous devez faire ce qu’elle dit. Spécifiez le refspec à tirer de votre config de branche.
[branch "master"]
merge = refs/heads/master