Использование команды git log --ancestry-path
На этом этапе мы рассмотрим, как использовать команду git log --ancestry-path
. Эта команда полезна для просмотра истории коммитов по определенному пути между двумя коммитами. Она помогает понять иерархию изменений.
Сначала создадим простой репозиторий Git и сделаем несколько коммитов, чтобы подготовить сценарий для использования опции --ancestry-path
.
Перейдите в директорию проекта:
cd ~/project
Создайте новую директорию для этой лабораторной работы и инициализируйте репозиторий Git:
mkdir ancestry-lab
cd ancestry-lab
git init
Вы должны увидеть вывод, указывающий на то, что пустой репозиторий Git был инициализирован:
Initialized empty Git repository in /home/labex/project/ancestry-lab/.git/
Теперь создадим файл и сделаем первый коммит:
echo "Initial content" > file1.txt
git add file1.txt
git commit -m "Initial commit"
Вы увидите вывод, подтверждающий коммит:
[master (root-commit) <commit-hash>] Initial commit
1 file changed, 1 insertion(+)
create mode 100644 file1.txt
Далее сделаем еще один коммит:
echo "Adding more content" >> file1.txt
git add file1.txt
git commit -m "Add more content"
Вы увидите вывод для второго коммита:
[master <commit-hash>] Add more content
1 file changed, 1 insertion(+)
Теперь создадим новую ветку и сделаем коммит в этой ветке:
git branch feature
git checkout feature
echo "Feature work" > file2.txt
git add file2.txt
git commit -m "Add feature file"
Вы увидите вывод о создании ветки, переходе на нее и новом коммите:
Switched to a new branch 'feature'
[feature <commit-hash>] Add feature file
1 file changed, 1 insertion(+)
create mode 100644 file2.txt
Вернемся в ветку master и сделаем еще один коммит:
git checkout master
echo "More master work" >> file1.txt
git add file1.txt
git commit -m "More master content"
Вы увидите вывод о переходе между ветками и новом коммите:
Switched to branch 'master'
[master <commit-hash>] More master content
1 file changed, 1 insertion(+)
Теперь у нас есть история коммитов с веткой. Используем команду git log
, чтобы посмотреть полную историю:
git log --all --decorate --oneline
Вы увидите журнал, похожий на этот (хэши коммитов и их порядок могут отличаться):
<commit-hash> (HEAD -> master) More master content
<commit-hash> Add more content
<commit-hash> (feature) Add feature file
<commit-hash> Initial commit
Теперь используем команду git log --ancestry-path
. Эта команда требует двух ссылок на коммиты. Она покажет коммиты, являющиеся предками второго коммита и потомками первого коммита.
Найдем хэш коммита для "Initial commit" и "More master content". Вы можете получить эти хэши из вывода команды git log --all --decorate --oneline
. Замените <initial-commit-hash>
и <master-commit-hash>
на фактические хэши из вашего вывода.
git log --ancestry-path <initial-commit-hash> <master-commit-hash> --oneline
Эта команда покажет коммиты на пути от начального коммита до последнего коммита в ветке master. Вы должны увидеть коммиты "Initial commit", "Add more content" и "More master content".
Опция --ancestry-path
полезна для понимания прямой линии разработки между двумя точками в истории, игнорируя коммиты из других веток, которые могут быть объединены позже.