#git #git-log
#git #git-log
Вопрос:
Иерархия верхнего уровня моего репозитория выглядит следующим образом:
/dir1
/dir2
/dir3
Я включаю HEAD
и git log --oneline --first-parent -5 -- dir1/
выдает что-то вроде следующего:
abcb COMM-25 Fix latest
ba0f COMM-17 Some stuff
cda8 New files
db7c COMM-9 Feature merge
e20a Init smth
В Интернете есть много интересных вещей, которые git log --oneline --first-parent db7c.. -- dir1/
можно получить
abcb COMM-25 Fix latest
ba0f COMM-17 Some stuff
cda8 New files
или даже git log --oneline --first-parent db7c..ba0f -- dir1/
для ограничения на обоих концах
ba0f COMM-17 Some stuff
cda8 New files
Но, черт возьми, я не могу найти ничего, что могло бы помочь вывести все коммиты С точностью до определенного идентификатора коммита.
Мне нужно что-то вроде git log --oneline --first-parent ..cda8 -- dir1/
, чтобы получить
cda8 New files
db7c COMM-9 Feature merge
e20a Init smth
<...>
имея только cda8
хэш. Самая последняя команда выше, конечно, является псевдокодом и не предоставляет никаких выходных данных в реальной жизни (к сожалению 🙂 ).
Итак, как я могу перечислить все коммиты в определенном каталоге и ПЕРЕД заданным идентификатором фиксации (включительно) без изменения заголовка?
Я думаю, что могу согласиться с изменением содержимого dir1 (ТОЛЬКО dir1, не касаясь dir2 и dir3!), Однако выполнение git checkout cda8 dir1/
или git reset cda8 dir1/
не оказывает никакого влияния на последующий git log <...> -- dir1/
результат.
Пожалуйста, помогите, гуру git!
Ответ №1:
Я думаю, что вы слишком старались здесь, и именно это помешало вам увидеть решение, скрытое на виду.
То, что вы запрашиваете, является стандартным поведением журнала при задании refspec. Он будет регистрировать всю историю фиксации, которая доступна * с этого момента :
git log --oneline --first-parent cda8 -- dir1/
(обратите внимание, что я предпринял вашу точную последнюю попытку, опустив « ..
«) следует вывести :
cda8 New files
db7c COMM-9 Feature merge
e20a Init smth
...
<follows ALL the rest of commits history (but only those which have modified dir1/)>
* «достижимый» в git следует понимать как «достижимый посредством рекурсивного исследования родительских элементов данного коммита»
Комментарии:
1. Если цель состоит в том, чтобы перечислить все обороты перед идентификатором фиксации, то вы хотели бы использовать
commit-id^
, поэтому, возможноba0f^
, в этом случае. 🙂2. @JohnSzakmeister полностью согласен. Я придерживался примера OP, чтобы сохранить последовательное сравнение и сосредоточиться на его ожидаемом результате , но технически ответить на его вопрос о названии , вы абсолютно правы!
3. ЛОЛ, как я мог это пропустить?! Большое спасибо, ребята, работает как шарм.
4. @RAM237 Мы все были там!