9
votes

Comment un commit disparaît-il du journal d'un fichier?

Alors j'ai apporté un changement dans un fichier, le poussé à notre repo principal, l'a vu là-bas. David tira de ce repo et a fait - bien, quelque chose - et ne pouvait pas voir mon changement. Puisque David est une victime de Microsoft typique, je lui ai demandé de pousser ce qu'il avait revenu au repo et je l'examinerais là-bas.

Git journal-nom-nom - nom produit xxx

mais backend de journal git / theimportantfile.js produit xxx

donc selon git, Backend / theimportantfile.js n'a pas été touché depuis des semaines, mais il a également été changé il y a deux heures avec l'AFC2Dec commettre. Comment puis-je suivre ce qui s'est passé?

git

6 commentaires

C'est étrange, David a-t-il fait un push -force ?


Que dit le diff pour la dernière modification du fichier? Était-ce réellement changé?


Essayez Git journal --Decorate = complet au cas où il y a une balise ou une branche nommée backend / theimportantfile.js . Ça ne serait pas drôle?


@rodrigo - Ce ne serait pas drôle, mais en fait, le nom réel était beaucoup plus long et il y avait plusieurs fichiers dans la même situation.


Le journal a déclaré que le changement avait été fabriqué dans AFC2Dec puis reventé en 194B7F (ce qui a du sens).


Git Log --CC aide-t-il? Ou même Git Diff-Tree -C | --cc ? Ou peut-être git blâme ? Vous voulez essayer de trouver où les bons changements ont été introduits à votre extrémité et où l'autre extrémité les a révélées (ou si l'histoire a été réécrite, elles n'étaient jamais là). Vous pouvez également essayer git log -g -g | -s (voir le manuel).


3 Réponses :


2
votes

Il apparaît que la fusion de David est qu'est-ce que vous avez eu? Je dis cela parce que la fusion semble avoir "retourné" vos modifications. xxx

Si cette commande ne donne aucune sortie intéressante, alors David peut-être fusionné avec une stratégie de "nôtre" ou l'intelligent 'cp est-il mes fichiers à un emplacement temporaire; git fusion; écrase les fichiers contradictoires; Git commit 'Workflow.

Quelle que soit la manière dont cet état a été arrivé à la fusion doit être jeté et refaire tel qu'il est évidemment défectueux. Vous pouvez également envisager de changer votre flux de travail telle que David n'a plus besoin de fusionner, mais plutôt de soumettre des demandes de tirage informelles (ou formelles) et que vous prenez soin de la fusion.


2 commentaires

David utilise une interface graphique de Windows très simple sur Git. Il certainement n'a pas spécifié de stratégie étrange.


Il suffit de remplacer un fichier avec une copie quelque part le ferait? Utilisation de 'Git Checkout ' pourrait aussi être le coupable. Ou bien que le fichier soit ouvert dans un éditeur et réaffûtez-le, commettez les résultats ...



1
votes

On dirait qu'il a peut-être eu un conflit de fusion et le résolu en acceptant sa version (qui était probablement un fichier non existant) au lieu de la vôtre. Vous pouvez ramener le fichier. Voir Comment résoudre un fichier ou un dossier


0 commentaires

2
votes

Je ne suis pas sûr que ce soit la nature de votre problème, mais par défaut, Git journal filtrera parfois commettrait qu'il ne pense pas "utile" ou "intéressant" dans l'ordre comprendre l'état final d'un arbre de validation. De Le Git Journal Docs :

Parfois, vous n'êtes parfois intéressé que par des parties de l'historique, par exemple les commits modifiant un particulier. Mais il y a deux parties de la simplification d'histoire , une partie sélectionne les commits et l'autre est de savoir comment le faire, car il existe diverses stratégies pour simplifier l'historique.

Les options suivantes affectent la manière dont la simplification est effectuée:

mode par défaut

Simplifie l'historique à l'histoire la plus simple expliquant l'état final de l'arbre. Plus simple parce qu'il pruneaux des branches latérales si le résultat final est le même (c'est-à-dire des branches de fusion avec le même contenu).

au lieu d'utiliser le mode par défaut, vous pouvez passer dans le drapeau - Historique intégral dans votre fichier et voyez si le commit "manquant" apparaît de cette façon: xxx

à partir du journal DOCS:

- Historique complet

Comme le mode par défaut, mais ne prune pas de l'histoire.

edit

Je sais que cela fonctionne parfois parce que j'ai eu une situation où j'avais un commit x dans maître qui contenait une Passez à un fichier thefile . COMMENTEZ X Cherry-Christine dans Un autrebranch par un collègue, appelons donc le nouveau commit y . Alors un autrebranch a été fusionné dans maître .

lorsque nous avons fait xxx nous ne verrions pas y dans la liste des commits, juste x , mais quand nous avons utilisé xxx

seulement alors alors que X et y apparaît. Je suppose que git n'a pas montré y par défaut car il a introduit un changement identique à l'état final de l'arbre de validation, car il était choisi Cherry à partir de x .


0 commentaires