it-roy-ru.com

Показать историю файла?

Возможный дубликат:
Просмотреть историю изменений файла с помощью Git-версий

Иногда я хочу просмотреть историю конкретного файла. В прошлом я использовал P4V, и это было очень быстро и интуитивно понятно.

  1. Щелкните правой кнопкой мыши по файлу и выберите историю.
  2. Прокрутите даты и увидите отличную разницу в том, что именно изменилось в этом файле в ту дату. Просто.

Переход на мерзавец это теперь изнурительная задача.

  1. "git log filename"
  2. Посмотрите историю и выберите дату, скопируйте хэш
  3. "git diff hash"
  4. Прокрутите diff для того, что изменилось в интересующем меня файле.
  5. Нет, это не так, давайте попробуем другую дату - вернитесь к шагу 2, промойте и повторите.

Я искал SO, и я попробовал некоторые из обычно предлагаемых guis: github, gitk, gitg, git-gui.

Все это устраняет необходимость запуска команд вручную, но рабочий процесс для этого одинаков. Просмотреть историю файла; просмотреть фиксацию; поиск по разным файлам. Это медленно и повторяется.

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

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

Спасибо за любые предложения.

133
Chris

Вы пробовали это:

gitk path/to/file
127
Pierre Mage

Вы можете использовать git log для отображения различий во время поиска:

git log -p -- path/to/file
139
ralphtheninja

git log -p сгенерирует патч (diff) для каждого выбранного коммита. Для одного файла используйте git log --follow -p $file.

Если вы ищете конкретное изменение, используйте git bisect для найдите изменение в представлениях журнала (n), разделив число коммитов пополам, пока не найдете то, что вы ищете, изменилось.

Также рассмотрите возможность просмотра истории, используя git blame to следите за изменениями в строке , если вы знаете, что это такое. Эта команда показывает самую последнюю ревизию, влияющую на определенную строку. Возможно, вам придется вернуться к нескольким версиям, чтобы найти первое изменение, в котором что-то было введено, если кто-то его со временем подправил, но это может дать вам хорошее начало.

Наконец, gitk в качестве графического интерфейса сразу показывает патч для любого коммита, на который я нажимаю.

Пример enter image description here:

45
Jeff Ferland

Главный вопрос для меня: что вы на самом деле пытаетесь выяснить? Вы пытаетесь выяснить, когда в этот файл был внесен определенный набор изменений?

Вы можете использовать git blame для этого, он будет аннотировать каждую строку с SHA1 и датой, когда она была изменена. git blame также может сообщить вам, когда определенная строка была удалена или куда она была перемещена, если вы заинтересованы в этом.

Если вы пытаетесь выяснить, когда появилась определенная ошибка, git bisect - это очень мощный инструмент. git bisect сделает бинарный поиск по вашей истории. Вы можете использовать git bisect start, чтобы начать разделение пополам, затем git bisect bad, чтобы отметить коммит, в котором присутствует ошибка, и git bisect good, чтобы отметить коммит, в котором нет ошибки. git проверит коммит между двумя и спросит вас, хорошо это или плохо. Обычно вы можете найти неисправный коммит за несколько шагов.

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

Если вы попытаетесь меньше думать о том, как выполнять определенный рабочий процесс, а больше о том, какая информация вам нужна, вы, вероятно, будете иметь множество рабочих процессов, которые (на мой взгляд) намного проще и быстрее.

10
LiKao