Почему path-restricted ‘git log’ пропускает коммиты слияния с интересными разрешениями конфликтов?

Если история файла включает фиксацию слиянием с» интересным » разрешением конфликта, git logпропустите ее. Почему это, и как я могу сделать, чтобы эта фиксация была включена?

(Под «интересным» я подразумеваю резолюцию, которая не просто берет версию HEADили MERGE_HEADдословно.)

Например, в этом образце репозитория я подготовил простую историю, иллюстрирующую проблему:

$ git log --oneline --graph 
* 4a69f452 add -stuff at C and G
*   9fc8e8bf resolve E-alpha + E-beta as E-gamma
|  
| * 95bc62e9 add -beta suffix on lines E and J
* | 465abd9e add -alpha suffix on lines A and E
|/  
* f43dc68c initial ten-line A..J file

Слияние зафиксировало разрешение конфликта путем введения совершенно новой версии Eстроки:

$ git show 9fc8e8bf -U0 | grep -A100 ^@@
@@@ -5,1 -5,1 +5,1 @@@
- E-alpha
 -E-beta
++E-gamma

Однако git logполностью замалчивает это. Список коммитов не объясняет текущее состояние Eстроки в test.txt:

$ git log --oneline 4a69f452 test.txt
4a69f452 add -stuff at C and G
95bc62e9 add -beta suffix on lines E and J
465abd9e add -alpha suffix on lines A and E
f43dc68c initial ten-line A..J file

Есть ли вариант, который я могу датьgit log, чтобы он включал коммит слияния?

Другие команды, напримерgit blame, показывают, что Eстрока последний раз была затронута в 9fc...коммите слияния:

$ git blame -L5,5 4a69f452 test.txt
9fc8e8bf9 (Matt McHenry 2016-12-28 16:55:10 -0500 5) E-gamma

(Примечание: вышеуказанные выходы произведены версией git 2.11.0.)

1 ответ

  1. Это происходитlog.follow, если для параметра config задано значение trueили, что эквивалентно, если вы передаете --followкоманду log.

    В документации к этой опции говорится, что она «не работает хорошо на нелинейной истории». Я думаю, это то, что они имеют в виду. 🙁

    $ git log --oneline 4a69f452 -- test.txt
    4a69f45 add -stuff at C and G
    9fc8e8b resolve E-alpha + E-beta as E-gamma
    95bc62e add -beta suffix on lines E and J
    465abd9 add -alpha suffix on lines A and E
    f43dc68 initial ten-line A..J file
    

    $ git log --oneline 4a69f452 --follow -- test.txt
    4a69f45 add -stuff at C and G
    95bc62e add -beta suffix on lines E and J
    465abd9 add -alpha suffix on lines A and E
    f43dc68 initial ten-line A..J file