Как проверить, был ли коммит в Git отменен

GitGitBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь определять, был ли коммит (коммит в системе Git) отменен. Мы рассмотрим, как использовать команду git log для поиска коммитов, которые отменяют другие коммиты, а затем воспользуемся командой git show для проверки деталей этих отмен. Наконец, мы рассмотрим коммиты, которые не были отменены, чтобы понять различия в их истории и содержимом. Это практическое упражнение приведет вас по шагам создания истории примерного проекта, включая коммит, который впоследствии будет отменен, что позволит вам потренироваться в применении методов идентификации и проверки отмененных коммитов.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BasicOperationsGroup -.-> git/diff("Compare Changes") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/add -.-> lab-560064{{"Как проверить, был ли коммит в Git отменен"}} git/commit -.-> lab-560064{{"Как проверить, был ли коммит в Git отменен"}} git/diff -.-> lab-560064{{"Как проверить, был ли коммит в Git отменен"}} git/log -.-> lab-560064{{"Как проверить, был ли коммит в Git отменен"}} end

Использование git log для поиска отмененных коммитов

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

Сначала убедимся, что мы находимся в директории нашего проекта. Откройте терминал и перейдите в директорию my-time-machine:

cd ~/project/my-time-machine

Теперь создадим несколько коммитов, чтобы имитировать историю проекта, включая коммит, который мы позже отменим.

Создайте первый файл:

echo "Initial content" > file1.txt
git add file1.txt
git commit -m "Add file1"

Вы должны увидеть вывод, похожий на следующий:

[master (root-commit) a1b2c3d] Add file1
 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 to file1"

Вы должны увидеть вывод, похожий на следующий:

[master 4e5f6g7] Add more content to file1
 1 file changed, 1 insertion(+)

Далее создадим коммит, который мы отменим позже:

echo "This commit will be reverted" > file2.txt
git add file2.txt
git commit -m "Add file2 (will be reverted)"

Вы должны увидеть вывод, похожий на следующий:

[master 8h9i0j1] Add file2 (will be reverted)
 1 file changed, 1 insertion(+)
 create mode 100644 file2.txt

Теперь отменим последний коммит. Мы можем использовать команду git revert HEAD, чтобы отменить самый последний коммит:

git revert HEAD --no-edit

Флаг --no-edit сообщает Git автоматически создать сообщение для отменяющего коммита без открытия редактора. Вы должны увидеть вывод, похожий на следующий:

[master k2l3m4n] Revert "Add file2 (will be reverted)"
 1 file changed, 1 deletion(-)
 delete mode 100644 file2.txt

Отлично! Теперь мы создали коммит, который отменяет изменения, внесенные коммитом "Add file2 (will be reverted)".

Теперь используем команду git log для просмотра истории коммитов и поиска отменяющего коммита:

git log --oneline

Вы должны увидеть вывод, похожий на следующий:

k2l3m4n (HEAD -> master) Revert "Add file2 (will be reverted)"
8h9i0j1 Add file2 (will be reverted)
4e5f6g7 Add more content to file1
a1b2c3d Add file1

Обратите внимание на сообщение коммита "Revert 'Add file2 (will be reverted)'". Это явно показывает, что этот коммит отменяет предыдущий коммит. Использование команды git log с флагом --oneline - это быстрый способ просмотреть сводку истории коммитов и идентифицировать отменяющие коммиты по их сообщениям.

Использование git show для проверки отмены коммита

На этом этапе мы будем использовать команду git show для изучения деталей отменяющего коммита и проверки того, что он корректно отменил изменения, внесенные исходным коммитом. Команда git show представляет собой мощный инструмент для исследования объектов Git, таких как коммиты, теги и бинарные файлы (blobs).

Сначала убедитесь, что вы находитесь в директории ~/project/my-time-machine:

cd ~/project/my-time-machine

Теперь нам нужен хэш (hash) коммита, который отменяет изменения. Вы можете получить его из вывода команды git log --oneline на предыдущем этапе. Это первый коммит в списке. Например, если вывод команды git log --oneline был таким:

k2l3m4n (HEAD -> master) Revert "Add file2 (will be reverted)"
8h9i0j1 Add file2 (will be reverted)
4e5f6g7 Add more content to file1
a1b2c3d Add file1

Тогда хэш коммита, который отменяет изменения, равен k2l3m4n. Примечание: Ваш хэш коммита будет другим.

Теперь используйте команду git show, за которой следует хэш коммита, который отменяет изменения. Замените YOUR_REVERT_COMMIT_HASH на фактический хэш из вывода команды git log --oneline:

git show YOUR_REVERT_COMMIT_HASH

Например, используя примерный хэш k2l3m4n:

git show k2l3m4n

Вы должны увидеть вывод, похожий на следующий:

commit k2l3m4n (HEAD -> master)
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:05:00 2023 +0000

    Revert "Add file2 (will be reverted)"

    This reverts commit 8h9i0j1.

diff --git a/file2.txt b/file2.txt
deleted file mode 100644
index 8b1a99c..0000000
--- a/file2.txt
+++ /dev/null
@@ -1 +0,0 @@
-This commit will be reverted

Разберем этот вывод:

  • Первая часть показывает детали коммита: хэш коммита, автора, дату и сообщение коммита. Обратите внимание, что сообщение явно указывает, что этот коммит отменяет определенный коммит (идентифицированный по его хэшу).
  • Раздел diff показывает изменения, внесенные этим коммитом. В данном случае он показывает, что файл file2.txt был удален (deleted file mode 100644). Это подтверждает, что коммит, который отменяет изменения, успешно отменил создание файла file2.txt.

Использование команды git show позволяет вам изучить точные изменения, внесенные любым коммитом в истории проекта. Это чрезвычайно полезно для понимания истории проекта и проверки того, что отмены или другие изменения были применены правильно.

Тестирование неотмененных коммитов

В предыдущих шагах мы создали несколько коммитов, а затем отменили один из них. Мы использовали git log для просмотра истории и git show для изучения отменяющего коммита. Теперь проверим, что коммиты, которые не были отменены, по-прежнему существуют и содержат ожидаемые изменения.

Сначала убедитесь, что вы находитесь в директории ~/project/my-time-machine:

cd ~/project/my-time-machine

Вспомним нашу историю коммитов из вывода git log --oneline:

k2l3m4n (HEAD -> master) Revert "Add file2 (will be reverted)"
8h9i0j1 Add file2 (will be reverted)
4e5f6g7 Add more content to file1
a1b2c3d Add file1

Коммиты "Add file1" и "Add more content to file1" не были отменены. Используем git show для изучения коммита "Add more content to file1" и просмотра его изменений.

Найдите хэш коммита "Add more content to file1" в выводе git log --oneline. В приведенном выше примере это 4e5f6g7. Не забудьте использовать фактический хэш вашего коммита.

Теперь используйте git show с этим хэшем коммита:

git show YOUR_MORE_CONTENT_COMMIT_HASH

Например, используя примерный хэш 4e5f6g7:

git show 4e5f6g7

Вы должны увидеть вывод, похожий на следующий:

commit 4e5f6g7
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:02:00 2023 +0000

    Add more content to file1

diff --git a/file1.txt b/file1.txt
index 8b1a99c..a1b2c3d 100644
--- a/file1.txt
+++ b/file1.txt
@@ -1 +1,2 @@
 Initial content
+Adding more content

Этот вывод показывает детали коммита, а раздел diff четко указывает, что в файл file1.txt была добавлена строка "Adding more content". Это подтверждает, что этот коммит и его изменения по-прежнему являются частью истории проекта, даже несмотря на то, что последующий коммит был отменен.

Это демонстрирует важный аспект Git: отмена коммита создает новый коммит, который отменяет изменения. Это не удаляет исходный коммит из истории. Это важно, так как сохраняется полная запись всех изменений, что позволяет понять полную эволюцию проекта.

Вы также можете использовать git show с хэшем коммита "Add file1" (a1b2c3d в примере) для просмотра первоначального создания файла file1.txt.

Используя git log для просмотра истории и git show для изучения отдельных коммитов, вы можете эффективно перемещаться по временной шкале проекта и понимать ее, даже когда некоторые коммиты были отменены.

Резюме

В этом практическом занятии (лабораторной работе) мы научились определять отмененные коммиты в репозитории Git. Мы начали с создания истории проекта с несколькими коммитами, в том числе с одним, специально предназначенным для отмены. Затем мы использовали команду git revert HEAD --no-edit для создания нового коммита, который отменяет изменения предыдущего коммита. Этот процесс показал, что при отмене коммита в историю добавляется новый коммит, а не удаляется исходный.

Мы также продолжили изучать, как использовать git log для поиска этих отмененных коммитов и git show для проверки их содержимого, различая их от неотмененных коммитов.