2015-09-28 1 views
0

Je ne me suis pas rendu compte que git ne comprend pas les noms de fichiers (par la conception (!)) Et a déplacé certains fichiers. Puis je les ai remis. Maintenant git log semble fonctionner, mais git log --follow ne fonctionne pas. Et Eclipse semble utiliser ce dernier. (git log --follow ne pouvait pas suivre mes renames.)Rétablir les renames pour que le journal git fonctionne à nouveau

Donc ce que je veux faire, c'est d'une façon ou d'une autre, ramener HEAD à l'endroit où il était avant de commencer. Jetez tout et avancez comme si cela ne s'était jamais produit. (J'ai fait d'autres changements depuis, je vais les faire à nouveau manuellement, pas de problème.)

git revert n'est pas la solution. Il va juste pousser des commits supplémentaires sur le dessus qui vont totalement confondre les histoires. J'ai besoin des changements partis, ou tout au moins pris directement sur la ligne principale.

donc je l'ai fait

git branch moveDead 
git reset --hard 4902b024588678cd493929955f79c6405f6dab9d 
git branch beforeMoves 

Toutes les bonnes. (branches juste pour référence future.)

Mais je ne peux pas maintenant pousser, comme j'avais poussé les fichiers renommés, ne pas réaliser le danger à ce moment. J'ai besoin de réinitialiser la télécommande.

Je suis le développeur principal sur ce dépôt, alors peut-être que nous pourrions restaurer le dépôt git principal à partir d'une sauvegarde, puis le faire avancer, mais ce serait horrible.

(Il n'y a pas de branches ou d'autres facteurs aggravants.)

+0

Pas une réponse, mais: git _does_ comprend le renommage de fichier, il ne les enregistre pas explicitement. 'git blame' fonctionne par exemple parfaitement bien même dans les renames. Pensez à utiliser un autre outil - le frontal git d'Eclipse est sympa, mais plutôt basique. – sleske

+1

J'aimerais que les gens cessent de dire que Git comprend les renames. Ce n'est pas le cas, et Linus considère le besoin de renommer comme de vieilles habitudes de subversion. git log avec ou sans --follow peut ou non suivre les renoms à condition que les fichiers n'aient pas été modifiés ou déplacés trop loin. Mais il n'y a aucun enregistrement du mouvement réel gardé. Je n'ai pas vérifié le blâme mais présume qu'il suit la même logique que log. Git est brisé à cet égard, et je ne m'en suis pas rendu compte parce que beaucoup de gens disent que ça marche. Il y a quelques hacks de renommer comme https://gist.github.com/emiller/6769886 mais je les évite! – Tuntable

Répondre

1

Si vous ne l'avez pas poussé votre dépôt encore, vous pouvez faire

git reset <commit-id> --hard 

commit-id est la commettras que vous voulez aller (chaque enfant commit sera LOST)

+0

Eh bien, oui, mais j'ai poussé. (Ma faute, je n'ai pas mentionné plus tôt.) – Tuntable