1
votes

Le passage au maître et le retour à la branche de travail montrent le fichier modifié dans Git

Je travaille sur le projet library_backend et c'est le dépôt git qui a 2 branches:

J'ai fait quelques changements dans la branche multilingue et l'ai poussé vers sa branche distante et après cela je veux vérifier certaines fonctions sur la branche master .

donc je suis passé à la branche master et après vérification, je suis revenu à la branche multilingue strong > mais maintenant il a modifié le fichier qui est books_model.php , comment peut-il modifier le fichier si je l'ai poussé il y a quelques secondes?

Vous pouvez voir ce que j'ai fait après avoir poussé vers la branche distante comme ci-dessous:

ABC@ABC-PC MINGW64 /c/xampp/htdocs/library_backend (multilanguage)
$ git checkout master
Switched to branch 'master'
M       application/models/api_model/books_model.php
Your branch and 'origin/master' have diverged,
and have 4 and 10 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

ABC@ABC-PC MINGW64 /c/xampp/htdocs/library_backend (master)
$ git checkout multilanguage
Switched to branch 'multilanguage'

ABC@ABC-PC MINGW64 /c/xampp/htdocs/library_backend (multilanguage)
$ git status
On branch multilanguage
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:   application/models/api_model/books_model.php

no changes added to commit (use "git add" and/or "git commit -a")


7 commentaires

Si vous avez modifié un fichier d'arbre de travail (et / ou la copie dans l'index), et que vous voulez passer à un autre commit sans avoir d'abord validé le fichier modifié, Git le permettra souvent. Il garde simplement le fichier modifié dans l'arborescence de travail (et l'index) et vous indique qu'il l'a fait. Voir également stackoverflow.com/q/22053757/1256452


@torek je le sais mais ici, je suis passé au maître instantanément après avoir poussé vers la télécommande, donc je n'ai modifié aucun fichier.


"Instantanément après avoir poussé" n'implique pas "n'avoir aucun fichier modifié dans l'index et / ou l'arbre de travail". git push pousse commits; ce qui se trouve dans l'index et l'arbre de travail ne sont pas des commits et sont donc complètement hors de propos.


oui vous avez raison, je connais @torek mais j'ai ajouté toutes les modifications dans mon commit avant de pousser à distance, donc il n'y a pas de fichiers modifiés après push.


Cela peut être le cas, mais nous ne pouvons voir que dans votre sortie ci-dessus. Ce dont vous avez besoin ici, c'est d'un exemple reproductible minimal . (Je peux voir qu'il y a une certaine différence entre un fichier d'arbre de travail et sa copie d'index, et je peux deviner l'une des nombreuses raisons possibles - par exemple, un système de fichiers pliant la casse, ou une divergence entre une fin de ligne et un fichier validé - mais je ne peux pas vous dire lequel de ceux-ci pourrait être le cas ici, le cas échéant.)


@torek, désolé mais je ne peux pas le reproduire, mais l'info supplémentaire est que, vous pouvez voir dans ma question dans la partie code lorsque je suis passé à la branche principale, il affiche M books_model sous info, alors que le passage au multilingue n'a rien de tel, qu'est-ce que cela signifie, peut-être que cela peut expliquer quelque chose.


Ce n'est pas vraiment clair, non sans un moyen de reproduire le problème.


3 Réponses :


0
votes

Très probablement, ce changement était déjà en place et vous n'avez poussé qu'un commit contenant d'autres changements. Ceci, bien sûr, si vous n’avez pas modifié ce fichier par erreur alors que vous étiez sur votre branche principale locale.


2 commentaires

non, j'ai poussé toutes les modifications et après être passé à la branche principale, je n'ai touché aucun fichier, j'ai seulement exécuté la commande git pour changer de branche, c'est tout.


comment vous êtes-vous engagé? êtes-vous sûr avant de valider que vous avez git add. ?



0
votes

Vous pouvez voir les changements survenus dans le fichier modifié en suivant la commande.

$ git diff application / models / api_model / books_model.php

Cela générera un résultat en couleur verte et rouge pour le code modifié.

La couleur rouge indique le code qui a été supprimé du fichier.

La couleur verte indique le code qui a été ajouté.

Si vous pouvez voir les modifications que vous avez apportées ici dans le résultat de cette commande en couleur verte, alors vous devriez aller dans votre branche "multilingue" et ajouter, valider, pousser à nouveau ce fichier.

Si vous ne pouvez pas voir les modifications que vous avez apportées au fichier ou si vous ne souhaitez pas le valider, vous pouvez annuler les modifications en récupérant la même branche «multilingue» et en lançant cette commande.

$ git checkout application / models / api_model / books_model.php

J'espère que cela vous aidera!


3 commentaires

j'ai déjà fait git diff, et la différence de fichier avait été faite par un autre utilisateur qui travaille sur le même repo, mais la question est, les changements devraient être arrivés lorsque j'ai tiré de la branche distante et après cela, j'ai poussé même branche multilingue, puis après avoir poussé, je suis passé au maître et de retour au multilingue, alors comment peut-il modifier le fichier?


C'est un cas inhabituel alors ... Je pense que vous devriez vous concentrer sur le réparer maintenant en faisant ajouter un commit, tirer, pousser à nouveau.


Je l'ai déjà fait, mais je me demande pourquoi cela s'est produit alors j'ai posé la question?



0
votes

Bien que le problème ne soit pas facilement reproductible, vous devriez tester la nouvelle commande expérimentale git switch (avec Git 2.23+ uniquement, Q3 2019): il serait moins sensible aux modifications automatiques, en utilisant l'option pour annuler les modifications:

git switch -f  multilanguage


0 commentaires