Увидеть историю региона в git

Интересно, есть ли способ увидеть историю региона в git, т.е. все коммиты, которые касались некоторых частей кода (определяемых как несколько смежных строк кода)? Я думаю, что это круто.

Я использую magit, поэтому любые предложения о том, как использовать magit для достижения этой цели, были бы еще лучше.

2 ответа

Решение

Первое простое решение git log -- file1 file2 dir1: он покажет только коммит, который коснулся этих файлов / каталогов.

Другой подход будет использовать git gui blame <commit> file Здесь каждая строка файла будет помечена sha1, который ее представил, и вы можете щелкнуть эти sha1, чтобы перемещаться между коммитами.

Вы, вероятно, хотите git-log -L

 -L <start>,<end>:<file>, -L :<regex>:<file>
     Trace the evolution of the line range given by "<start>,<end>" (or the
     funcname regex <regex>) within the <file>. You may not give any pathspec
     limiters. This is currently limited to a walk starting from a single revision,
     i.e., you may only give zero or one positive revision arguments. You can
     specify this option more than once.

     <start> and <end> can take one of these forms:

     o   number

         If <start> or <end> is a number, it specifies an absolute line number
         (lines count from 1).

     o   /regex/

         This form will use the first line matching the given POSIX regex. If
         <start> is a regex, it will search from the end of the previous -L range,
         if any, otherwise from the start of file. If <start> is "^/regex/", it
         will search from the start of file. If <end> is a regex, it will search
         starting at the line given by <start>.

     o   +offset or -offset

         This is only valid for <end> and will specify a number of lines before or
         after the line given by <start>.

     If '`:<regex>'' is given in place of <start> and <end>, it denotes the range
     from the first funcname line that matches <regex>, up to the next funcname
     line. `:<regex>'' searches from the end of the previous `-L range, if any,
     otherwise from the start of file. "^:<regex>" searches from the start of file.

В частности, для magit поддержки в настоящее время нет, но есть соответствующая открытая проблема: https://github.com/magit/magit/issues/1717

Другие вопросы по тегам