2013-09-26 4 views
1

J'ai une base de code contenant près de mille fichiers. Je travaille dans une succursale locale avec des changements non validés. À un moment donné aujourd'hui, j'ai ajouté une instruction error_log à un fichier qui renvoyait un élément d'information très utile. Je pensais que j'en avais fini avec le log, ce qui a ramené le fichier à son état "inchangé" en ce qui concerne git. J'ai besoin de remettre ce journal, mais je ne peux pas me souvenir du fichier ou de la fonction dont il faisait partie.Git - voir les fichiers qui ont été modifiés, même si les modifications ont été supprimées

Y at-il une commande git qui peut me montrer une liste de fichiers qui ont été modifiés, même si les modifications ont été supprimées?

+0

duplication possible de [Git récupérer les modifications non validées] (http://stackoverflow.com/questions/3240436/git-recover-uncommitted-changes). Différent moyen d'y arriver, mais malheureusement git ne peut pas vous le dire. [Commit souvent] (http: //en.wikibooks.org/wiki/Commit_Often, _Perfect_Later, _Publish_Once: _Git_Best_Practices/Commiting_early_and_often)! – cmbuckley

Répondre

4

Je ne pense pas qu'il existe un moyen de le faire dans git, mais je listerais les fichiers récursivement dans l'ordre où ils ont été modifiés. Donc, dans Linux, vous devriez être en mesure de faire quelque chose comme

ls -ltrR

Vous pourriez être en mesure de trouver le fichier de cette façon. Ce qui vaut mieux que rien.

+0

Merci. Malheureusement, nous sommes sur Windows, pas sur Linux. Et les fichiers ne sont pas dans un seul dossier; il y a une tonne de sous-dossiers, donc je ne peux pas trier tout le code par date de modification. – EmmyS

+1

@EmmyS Cette approche devrait fonctionner aussi bien à partir de Windows. Windows Explorer vous permet de rechercher des fichiers, y compris des sous-répertoires, et vous donne une grande liste de tout ce qu'il trouve. Dans cette fenêtre, vous devriez toujours pouvoir trier par heure de modification. – hvd

-1

Les modifications non validées sont toujours incorrect. Vous devriez toujours travailler par petites étapes et vous engager après chaque étape. - Les validations ne sont que locales et peuvent ensuite être écrasées sans aucun problème.

Avec de petites étapes validées, vous pouvez toujours revenir à chaque étape. - Sans aucun commit, git ne peut pas vous aider à récupérer les changements.

Par conséquent, vous devez regarder en dehors de git. Comme les horodatages du système de fichiers ou peut-être quelques journaux de votre éditeur.

+0

Merci pour la conférence. Cela ne répond pas vraiment à la question, et ce n'est pas un problème. Mes commits sont bien. Je ne vois pas l'intérêt de commettre quand je n'ai rien résolu. – EmmyS

+0

Vous avez demandé une commande git. - La vérité de la maison est: Il n'y en a pas. (git ne sait rien de vos changements à moins que vous ne les ayez validés.) – michas

+0

Ensuite, tout ce que vous deviez faire était d'ajouter un commentaire disant qu'il n'y a pas de commande git. Votre "réponse" n'est pas une réponse. – EmmyS

0

Si, à un moment donné, vous avez affecté la ligne error_log à votre dépôt, l'existence de cette ligne existe toujours dans votre historique et vous pouvez la récupérer de plusieurs manières différentes. La plus franche est d'utiliser simplement la sortie du patch dans le git log, et en supposant que la sortie est transmis au téléavertisseur less, alors vous appuyez simplement sur / et entrez une expression rationnelle pour cette ligne:

git log -p 
# While in `less` 
/error_log 

Vous pouvez ensuite recherchez la sortie pour l'expression rationnelle en appuyant sur n pour avancer au prochain hit, ou N pour revenir au dernier. Une autre façon de trouver l'existence de la ligne (en supposant qu'elle ait été validée) est d'utiliser l'option -S ou -G pour git log. Les anciennes recherches pour l'ajout ou la suppression du texte à l'aide d'une chaîne fixe, alors que celui-ci utilise également regexes:

# Fixed string 
git log --name-status -S "error_log" 

# Regex 
git log --name-status -G "error_log" 

La sortie sera une liste des fichiers qui ont soit eu la chaîne error_log ajouté ou retiré d'eux à un moment donné.

Questions connexes