2017-01-05 1 views
-2

J'ai modifié 4 lignes dans un fichier et j'ai besoin d'appliquer ces modifications à une validation précédente. Cela devrait être ridiculement facile.Déplacement de 4 lignes d'un fichier vers un commit précédent transformé en cauchemar

  1. Je planqué le fichier
  2. Git rebasées retour plus haut commit
  3. fichier Un-planqué, puis rebasage a continué

Git signalé tout A-OK, vérifier l'historique des commits révèle git effectivement créé une fusion à 3 voies et a dupliqué tous les commits après si maintenant j'ai 2 ensembles de commits. En grattant ma tête j'ai rebasé à nouveau et git arrêté avec un conflit de fusion, j'ai corrigé le conflit de fusion et maintenant j'ai encore des commits en double mais la fusion à 3 voies a heureusement disparu.

J'ai donc rebasé à nouveau pour déplacer les doublons les uns sur les autres et les écraser mais cela s'est terminé dans un conflit de fusion. J'ai corrigé la fusion et maintenant j'ai une nouvelle fusion à 3 directions - retour à la case départ.

Je suis passé par toutes les étapes ci-dessus une fois de plus pour arriver à dupliquer les commits, mais pas de fusion à 3 voies et cette fois juste déplacé les commits en double sur le rebasage et ne pas les écraser, je les écraserais 2ème tour. Cependant, la chose vraiment étrange est qu'il a éliminé le commit entier contenant les 4 changements de ligne et je sais que j'ai pris soin de ne pas effacer la ligne du fichier todo git rebase. Donc, depuis que les 4 changements de ligne sont maintenant mystérieusement partis mais heureusement tout le reste semble bien, j'ai décidé de rebasculer et de modifier le commit et retaper dehors ces 4 changements de ligne - Bien de la pure frustration j'ai oublié d'ajouter 2 changements de ligne si seulement 2 changements ont été ajoutés mais pour rendre les choses encore plus frustrantes Il a fait une fusion sanglante à 3 reprises et a dupliqué une fois de plus tous les commits par la suite. Donc, en l'état actuel, je suis en état de rebasme pour un changement très simple d'un fichier, 2 lignes ont été ajoutées, 2 ont été ajoutées, et nous sommes de retour à une fusion à 3 voies, ce qui en fait un cauchemar .

Aussi, si elle aide tout commit est visuellement ici un ASCII arbre

* 2c935a7 (HEAD -> feature/event-system) Integrated Event System and Fine Tuned Files 
* c579fde Finished Event System 
| * ec6656e (origin/feature/event-system) Integrated Event System and Fine Tuned Files 
| * ee51864 Finished Event System 
|/ 
* 6fcbe87 (origin/develop, develop) Initial Assets and Files Commit 
* f5015f8 Initial Libraries Commit 
* 77f162a (origin/master, master) Initial Commit 

Modifier

Pour répondre à certaines de vos questions les miseur, voici une ventilation beaucoup plus approfondie de tout

http://pastebin.com/GTzjeVHC

+1

Pourriez-vous afficher les commandes réelles que vous avez exécutées? Et quel commit essayez-vous de changer?Et l'arbre est votre situation avant ou après le rebasage? – Schwern

+0

'git commit -a -s -m" correctif pour la commande foo-bar "; git rebase --interactif foo_bar_hash^'. Cela peut ne pas fonctionner si 'foo_bar_hash' est un commit initial. Dans ce cas, vous devez ajouter '--root'. – 0andriy

+0

Aussi utile serait si vous pouvez inclure ce que le changement de 4 lignes était, et quel genre de conflits vous obteniez. Sans cette info et les réponses aux questions de @ Schwern, ce post est assez flou. –

Répondre

0

Il s'avère qu'il n'y avait pas de fusion à 3 voies depuis le début et rien de ce que je faisais était faux.

git log me faisait remarquer visuellement l'histoire lointaine mélangée avec mon histoire qui, lorsqu'elle était regroupée semblait que mon histoire était vraiment foiré et m'a fait peur de pousser. Mais en faisant un acte de foi et en poussant de toute façon mis à jour l'extrémité distante et git log montre maintenant la même chose sans divergence de l'histoire. Je pense que toute personne qui pourrait être confuse, comme si elle avait été écrite n'importe où, m'aurait épargné de nombreuses heures à essayer de comprendre les choses.