рассчитать номер строки в другой ветке - PullRequest
0 голосов
/ 07 марта 2020

После небольшого исследования я все еще не знаю, возможно ли это с помощью только собственных команд git, но я пытаюсь найти способ вычислить номер строки определенной строки в моей текущей ветви в другой ветви. (если он существует), через код. Лучшая идея - запустить git diff на ветках и выполнить ручной поиск, который кажется неэффективным и подвержен ошибкам. У кого-нибудь есть лучшие идеи о том, как это можно сделать? Спасибо за ваше время и помощь.

Скажем, например, у меня была ветка y, и есть файл F с номером строки 126. Та же самая линия на ветви x является строкой 90. Как мне узнать, что линия находится на линии 90 с помощью команд code / git?

Cheers

1 Ответ

0 голосов
/ 07 марта 2020

Git автоматизирует часть возврата с помощью git log -L, скажем, вы хотите отследить строку 6 назад во времени в файле 1. c git log -L 6,6:file1.c, и она покажет вам.

Но я думаю никто не учил этому делать наоборот, чтобы проследить эволюцию вперед . Чтобы использовать существующий механизм, вам нужно будет сделать историю и развернуть эволюцию кузена. Это не было бы таким сложным, а одноразовый фиксированный структурный коммит всего лишь на сто байт ... конечно, почему бы и нет. Это проходит самый смелый тест в истории среднего размера,

редактирование: исправлена ​​ошибка с головой, оригинальная публикация почему-то имела версию _before_ Я получил ее на работу

branch2=your/other/branch
base=`git merge-base @ $branch2`
declare -A mymap
while read original children; do
    newparents=""
    for child in $children; do newparents+=" -p ${mymap[$child]}"; done
    mymap[$original]=`git commit-tree $newparents -m $original $original:`
    [[ $original = $base ]] && break;
done <<EOD    
    $(git rev-list --ancestry-path --children $base^! $branch2)
EOD

Затем вставьте номера начальной и конечной строк, к которым вы отследили текущий совет, обратно в

git log -L $start,$end:file1.c ${mymap[$base]}
...