Я недавно посмотрел историю файла с
git log --full-history -- file
и он обнаружил один коммит, добавляющий этот файл, и несколько коммитов слияния без указания, что они удалили файл. Еще в HEAD
этот файл не существовал. После некоторых поисков я обнаружил, что файл был удален как часть одного из перечисленных коммитов слияния (воссоздав слияния и сравнив результат с оригиналом). Для примера возьмем историю, созданную следующими командами оболочки:
$ git init
Initialized empty Git repository in $PWD/.git/
$ echo content1 > file1
$ git add file1
$ git commit -m commit1
...
$ echo content2 > file2
$ git add file2
$ git commit -m 'commit2'
...
$ git checkout @~
...
$ git merge --no-ff --no-commit @{-1}
Automatic merge went well; stopped before committing as requested
$ git rm -f file2
rm 'file2'
$ git commit --no-edit
Теперь git log --full-history -- file2
перечисляет оба соответствующих коммита, но, глядя на коммит слияния (например, с помощью git show
), не очевидно, что file2
исчезло там.
Мне понятно, почему git show
не сообщает эту информацию, и большую часть времени это разумно. Тем не менее, мне интересно, как я мог идентифицировать такой коммит в более сложной истории. Есть ли что-то готовое для использования или мне нужно воссоздать все объединенные деревья?