73 votes

Git pull ne tire pas tout

J'ai un serveur où il y a une certaine configuration que je ne connais pas bien, où je dois juste tirer git et obtenir ce qui est dans un repo github, puis le redémarrer afin de le déployer.

Le truc, c'est qu'il y a un commit qui n'est pas mon dernier, qui n'est pas vraiment sur mon serveur. Les fichiers ne sont pas dans .gitignore. Comment puis-je m'assurer qu'un pull a retiré un commit ?

Je ne sais vraiment pas comment le réparer, je pense à tout redémarrer :(

14:41][root@someserver] someserver_dir (master)$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   Gemfile
#   modified:   Gemfile.lock
#   modified:   config/assets.yml
#   modified:   config/database.yml
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   randomfiles

0 votes

Plus d'informations permettront de répondre plus facilement à votre question. Que fait le git status vous montrer ? Êtes-vous sur la bonne branche localement ? Par exemple, si vous regardez le site de master sur le serveur, est-ce que vous êtes en check out pour master localement ? Que pensez-vous de git log origin/master..master ?

0 votes

Le dépôt git est-il public ? Si oui, fournissez une URL.

0 votes

Non public, le statut git me montre que tout est cool, il y a seulement une branche.

206voto

Amber Points 159296

Si vous souhaitez que la version de votre serveur reflète toujours une livraison de votre dépôt, il est probablement préférable d'utiliser la méthode suivante git reset au lieu de git pull - de cette façon, vous n'invoquez jamais la fonctionnalité de fusion, mais vous définissez tous les fichiers exactement comme ils sont dans le commit que vous réinitialisez. Par exemple :

git fetch origin master
git reset --hard FETCH_HEAD

12 votes

J'oublie toujours cette commande, c'est pourquoi je reviens sans cesse sur ce fil. Je voulais juste ajouter que remplacer 'master' par n'importe quel autre nom de branche fonctionne également, si vous voulez tout récupérer d'une branche spécifique.

2 votes

Vous pourriez aussi bien réinitialiser à une branche spécifique, donc git reset --hard origin/master fonctionne aussi, ainsi que toute branche que vous spécifiez. (c'est assez drôle de me voir poser cette question il y a 5 ans, je me souviens que je gérais un serveur distant qui utilisait git pour déployer et qui s'est retrouvé dans un mauvais état haha)

0 votes

Après cela, les fichiers sont restaurés comme à l'origine, mais j'ai obtenu ce message "fatal : Could not reset index file to revision 'FETCH_HEAD'". Que dois-je faire ?

14voto

invinciblemuffi Points 321

Vous pouvez utiliser git pull origin branch_name of the github .

Ex : Si j'ai une branche de production sur GitHub, alors je vais écrire git pull origin production ce qui me donnera tous les derniers commits.

Faire seulement git pull ne vous donne parfois pas les derniers commits de la branche de production, même si vous travaillez sur cette branche et la committez.

Les coulisses du travail

http://git-scm.com/docs/git-pull#_default_behaviour

Explication et exemples

4voto

techExplorer Points 177

Essayez de nettoyer votre dépôt local avec et ensuite lancez git pull :

$ git gc --prune=now
$ git remote prune origin

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X