Git - показать историю файла?

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

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

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

Переключение на Git теперь является изнурительной задачей.

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

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

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

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

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

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

Ответ 1

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

gitk path/to/file

Ответ 2

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

git log -p -- path/to/file

Ответ 3

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

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

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

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

Пример enter image description here:

Ответ 4

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

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

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

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

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