2013-09-26 3 views
1

У меня есть кодовая база, содержащая около тысячи файлов. Я работаю в локальном филиале с незафиксированными изменениями. В один момент ранее сегодня я добавил оператор error_log в один файл, который возвратил очень полезную информацию. Я думал, что с ним все сделано, поэтому удалил журнал, возвратив файл в состояние «без изменений», насколько это касается git. Мне нужно вернуть этот журнал, но я не могу в жизни помнить, какой файл или функция он был частью.Git - см. Файлы, которые были изменены, даже если изменения были удалены

Есть ли какая-либо команда git, которая может показать мне список файлов, внесенных в них, даже если изменения были удалены?

+0

Возможный дубликат [Git восстановить незафиксированные изменения] (http://stackoverflow.com/questions/3240436/git-recover-uncommitted-changes). Разный способ добраться туда, но, к сожалению, git не может вам это сказать. [Commit часто] (http: //en.wikibooks.орг/вики/Commit_Often, _Perfect_Later, _Publish_Once: _Git_Best_Practices/Commiting_early_and_often)! – cmbuckley

ответ

4

Я не думаю, что есть способ сделать это в git, но я бы перечислил файлы рекурсивно в том порядке, в котором они были изменены. Таким образом, в Linux, вы должны быть в состоянии сделать что-то вроде

ls -ltrR

Вы могли бы быть в состоянии найти файл таким образом. Что лучше, чем ничего.

+0

Спасибо. К сожалению, мы работаем над Windows, а не с Linux. И файлы не находятся в одной папке; есть тонна подпапок, поэтому я не могу просто отсортировать всю базу кода по дате изменения. – EmmyS

+1

@EmmyS Этот подход должен отлично работать с Windows. Проводник Windows позволяет искать файлы, включая подкаталоги, и дает вам один большой список всего, что он находит. В этом окне вы все равно сможете сортировать по времени модификации. – hvd

-1

Неотмечаемые изменения всегда плохой. Вы должны всегда работать небольшими шагами и фиксировать после завершения каждого шага. - Записи являются только локальными и могут быть впоследствии раздавлены без каких-либо проблем.

С помощью небольших шагов вы всегда можете вернуться к каждому шагу. - Без каких-либо сборов git не может помочь вам в восстановлении изменений.

Поэтому вы должны смотреть за пределы git. Как временные метки файловой системы или, возможно, некоторые журналы вашего редактора.

+0

Спасибо за лекцию. На самом деле это не отвечает на вопрос, и это не проблема. Мои коммиты в порядке. Я не вижу смысла совершать, когда я ничего не решил. – EmmyS

+0

Вы попросили команду git. - Домашняя правда: нет. (git просто ничего не знает о ваших изменениях, если вы их не совершаете.) – michas

+0

Тогда вам нужно было добавить комментарий, в котором говорится, что команды git нет. Ваш «ответ» - не ответ. – EmmyS

0

Если в какой-то момент времени вы совершили линию error_log к вашему репо, то существование этой линии все еще существует в вашей истории, и вы можете восстановить ее несколькими способами. Самый прямой, чтобы просто использовать выход патча в git log, и предполагая, что выход передается на less пейджера, то вы просто нажать / и ввести регулярное выражение для этой строки:

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

Вы можете найдите выход для регулярного выражения, нажав n, чтобы перейти к следующему удару, или N, чтобы вернуться к последнему.

Другой способ найти существование линии (при условии, что она была совершена) - использовать параметр -S или -G для git log. Прежние ищет добавления или удаления текста, используя фиксированную строку, в то время как последний также использует регулярные выражения:

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

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

выход будет список файлов, которые либо имели строку error_log добавляется или удаляется из них некоторый момент времени.

Смежные вопросы