2016-11-28 1 views
0

Comme j'ai récemment essayé de pousser mes commits à github, j'ai reçu le même message d'erreur que dans ce question. J'ai retiré les fichiers de mon dépôt mais je dois maintenant nettoyer l'historique. Comme conseillé dans les réponses j'ai regardé BFG, ce qui semble être la solution. En lisant le instructions, il commence par utiliser git --mirror link-to-remote-repo.Nettoyage de l'historique git avec BFG

Maintenant je me demande, parce que je ne pouvais pas encore pousser le plus récent commit et probablement mon historique de commit local est plus long que celui sur github. En outre, je ne suis pas sûr que tout le travail que j'ai fait est sur une branche et non sur le maître et comment cela affecte mon référentiel.

+0

Qu'est-ce qu'une question? – Ivan

+0

Ce que je ne comprends pas, c'est que pour utiliser BFG, je devrais faire un clone nu ('--mirror') de mon dépôt distant. Mais ce n'est pas à jour. Alors, comment cela va-t-il fonctionner? Je nettoie l'historique du miroir distant, mais il reste encore un peu d'historique à propos de ce fichier dans mon dépôt local dans les commits que j'ai fait après la dernière fois que j'ai poussé sur github. – fukurai

+0

Ok. Dans le cas où vous n'avez pas un grand nombre de changements (commits), vous pouvez le faire manuellement: vérifier la nouvelle branche sur le commit de base; Pour chaque commit (de la branche problématique) - 1) utilisez la commande 'git cherry-pick --no-commit'; 2) supprimer du fichier binaire problématique de l'index (s'il existe); 3) commit – Ivan

Répondre

0

solution manuelle (basée sur cheery pick)

EDIT: Avant de commencer s'il vous plaît commettre ou cacher vos changements locaux.

Disons que nous avons deux branches master et dev qui ont commun avec SHA1 = commettent X. Direction dev engage A1 contiennent les, A2, ..., A16

  • git checkout dev
  • git checkout -b new-dev
  • git reset --hard X

Pour chaque validation dans dev (A1, ..., A16):

  • git cherry-pick A1 --no-commit
  • Vérifiez que vous index avec git status
  • Retirez vos fichiers binaires problématiques de l'index git reset HEAD myfolder/mybinary.rpm
  • supprimer le fichier git rm myfolder/mybinary.rpm
+0

Donc juste pour moi de comprendre, 1. Je crée une nouvelle branche 'new-dev' et faire' git reset --hard X' Cela supprime tous les changements de tout fichier suivi dans 'new-dev'. 2. Je travaille sur les commits dans 'dev' en utilisant' git cherry-pick' pour supprimer le fichier comme vous l'avez décrit. Maintenant, je suis à mon dernier commit. Est-ce que je fusionne d'abord avec 'new-dev' et ensuite avec' master'? Comment ramener mon dépôt à la dernière validation, sans les mauvais fichiers? – fukurai

+0

Après avoir fait toutes les étapes, vous avez une nouvelle branche 'new-dev' avec le même historique que dans la branche' dev' moins les fichiers binaires "mauvais". Vous devriez voir le même nombre commettre dans 'new-dev' que dans' dev' avec les mêmes commentaires. Alors maintenant, vous devriez fusionner 'new-dev' avec votre' master'. Plus tard, lorsque vous êtes vraiment sûr que tout est correct, vous pouvez supprimer la branche 'dev'. – Ivan

+0

Je vois. Mais alors je fais 'git cherry-pick' sur' new-dev' et pas sur 'dev', ou? – fukurai