Цель (X): я просматриваю определенную строку в файле в своем git checkout. git blame
сообщает мне, что эта строка (в ее нынешнем виде) впервые была зафиксирована в коммите 1234abcd
, который один из моих коллег сделал локально в своем собственном репо несколько месяцев назад. Через какое-то время он был объединен с нашей главной веткой. Я хочу найти этот коммит слияния.
Y0: пока лучший метод, который я придумал, – запустить
git blame master~42 path/to/file/in/question | grep ^1234abcd
для различных значений 42, а затем выполните двоичный поиск, чтобы найти самого старого прямого предка master
, который содержит рассматриваемый код. На практике это работает (поскольку наша ветка master следует строгой политике "никаких толчков, только PR"), но громоздко.
Y1: я думаю, что смог бы быстро найти слияние, если бы только мог заставить git log
показывать мне все коммиты, которые
- коммиты слияния, и
- являются предками HEAD и
- иметь
1234abcd
в качестве предка
К сожалению, кажется, что нотация Git для указания диапазонов ревизий не может выразить третье условие. Синтаксис 1234abcd..HEAD
(который, как и следовало ожидать, делает это интуитивно) вместо этого дает мне «предка HEAD, но не предка 1234abcd
» и, следовательно, отображает все виды других действий, которые произошли с основной ветвью после того, как мой коллега отделил рабочую ветвь, которая была позже объединились. Эта семантика, возможно, полезна, когда отправной точкой была «точка защемления» в графе коммитов, но не настолько, чтобы проследить судьбу случайного рабочего коммита.
Вопрос. Есть ли способ сделать Y1? (Если не считать написания моей собственной программы для анализа графа коммитов и вычисления отношения достижимости). Или есть лучший способ достичь X?
(Один наивный подход не является стартовым: если бы я знал, какое имя мой коллега использовал для своей рабочей ветки, когда он вносил изменения, я мог бы искать комментарии коммита, чтобы найти тот, который говорит, что он объединил эту конкретную ветку с мастером. Однако прошлая ветка имена не записываются нигде в репозитории, и на самом деле этот комментарий к коммиту, вероятно, является единственным местом, где это имя ветки вообще существует).
--ancestry-path
дляgit log
. - person hmakholm left over Monica   schedule 27.11.2018