Question Comment pouvez-vous obtenir git pour toujours tirer d'une branche spécifique?


Je ne suis pas un maître git, mais je travaille avec lui depuis un certain temps, avec plusieurs projets différents. Dans chaque projet, j'ai toujours git clone [repository] et à partir de ce moment, peut toujours git pull, tant que je n'ai pas de changements exceptionnels, bien sûr.

Récemment, j'ai dû revenir à une branche précédente et je l'ai fait avec git checkout 4f82a29. Lorsque 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 à la place, doit spécifier git pull origin master, ce qui est agaçant, et m'indique que je ne comprends pas tout à fait 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 le maître d'origine, et comment le changer?

METTRE À JOUR:

-bash-3.1$ cat config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[branch "master"]
[remote "origin"]
    url = git@github.com:user/project.git
    fetch = refs/heads/*:refs/remotes/origin/*

MISE À JOUR 2: Pour être clair, je comprends que ma méthode originale a pu être incorrecte, mais j'ai besoin de réparer ce repo pour que je puisse simplement utiliser git pull encore. Actuellement, git pull génère:

-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 l'avait fait avant mon git checkout.


466
2018-03-18 15:53


origine


Réponses:


En dessous de [branch "master"], essayez d’ajouter ce qui suit au fichier de configuration Git du dépôt (.git/config):

[branch "master"]
    remote = origin
    merge = refs/heads/master

Cela dit à Git 2 choses:

  1. Lorsque vous êtes sur la branche principale, la télécommande par défaut est l'origine.
  2. En utilisant git pull sur la branche master, sans remote et branche spécifiée, utilisez la valeur par défaut remote (origine) et fusionnez dans les modifications de la branche master distante.

Je ne sais pas pourquoi cette configuration aurait été supprimée de votre configuration. Vous devrez peut-être suivre les suggestions que d'autres personnes ont également publiées, mais cela peut fonctionner (ou aider au moins).

Si vous ne voulez pas éditer 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

715
2018-03-18 19:40



Si vous préférez, vous pouvez définir ces options via la ligne de commmand (au lieu d'éditer le fichier de configuration) comme ceci:

  $ 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 de tous vos projets, y compris ceux sur lesquels vous pourriez travailler à l'avenir, ajoutez-le en tant que paramètre de configuration globale:

  $ git config --global branch.master.remote origin
  $ git config --global branch.master.merge refs/heads/master

137
2018-02-22 00:36



git branch --set-upstream master origin/master

Cela va ajouter les informations suivantes à votre config fichier:

[branch "master"]
    remote = origin
    merge = refs/heads/master

Si tu as branch.autosetuprebase = always alors il ajoutera également:

    rebase = true

79
2018-06-11 04:25



Je trouve difficile de se rappeler exactement git config ou git branch arguments comme dans les réponses de mipadi et Casey, donc j'utilise ces 2 commandes pour ajouter la référence amont:

git pull origin master
git push -u origin master

Cela ajoutera la même information à votre fichier .git / config, mais je le trouve plus facile à retenir.


47
2017-10-15 00:11



Git tirer combine deux actions: récupérer les nouvelles validations du référentiel distant dans les branches suivies, puis les fusionner votre agence actuelle.

Lorsque vous avez extrait un commit particulier, vous n'avez pas de branche en cours, vous n'avez que HEAD pointant sur la dernière validation que vous avez faite. Alors git pull n'a pas tous ses paramètres spécifiés. C'est pourquoi ça n'a pas marché.

Sur la base de vos informations mises à jour, ce que vous essayez de faire est de rétablir votre repo à distance. Si vous connaissez le commit qui a introduit le bogue, la manière la plus simple de gérer cela est de git revertqui enregistre une nouvelle validation qui annule la validation buggy spécifiée:

$ git checkout master
$ git reflog            #to find the SHA1 of buggy commit, say  b12345
$ git revert b12345
$ git pull
$ git push

Comme c'est votre serveur que vous souhaitez modifier, je suppose que vous n'avez pas besoin de réécrire l'historique pour masquer le commit buggé.

Si le bogue a été introduit dans un commit de fusion, cette procédure ne fonctionnera pas. Voir Comment-revenir-un-défaut-fusionner.


23
2018-03-18 18:12



Ne voulant pas éditer mon fichier de configuration git, j'ai suivi les infos dans le post de @mipadi et utilisé:

$ git pull origin master

10
2017-07-03 00:56



Il y a aussi un moyen de configurer Git, donc il tire toujours et pousse la branche distante équivalente vers la branche actuellement extraite de la copie de travail. Cela s'appelle une branche de suivi qui git prêt recommande la configuration par défaut.

Pour le référentiel suivant 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

Genre de magie, à mon humble avis, mais cela pourrait aider dans les cas où le branche spécifique est toujours la branche actuelle.

Lorsque vous avez branch.autosetupmerge mis à true et vérifier une succursale pour la première fois, Git vous parlera du suivi de 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 alors 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 git@github.com:bigben87/webbit.git
   1bf578c..268fb60  gh-pages -> gh-pages

8
2018-06-18 17:05



Votre question immédiate de savoir comment faire en sorte que ce soit maître, vous devez faire ce qu’il dit. Spécifiez le refspec à tirer dans votre config de branche.

[branch "master"]
    merge = refs/heads/master

4
2018-03-18 16:36