Фиксация списка ПЕРЕД заданным идентификатором фиксации

#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 Мы все были там!