Как проверить, содержит ли хранилище (stash) Git определенные изменения

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

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

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять содержимое хранилища Git (Git stash), чтобы определить, содержит ли оно определенные изменения. Мы начнем с внесения и сохранения некоторых изменений в образцовом репозитории.

Затем вы будете использовать команду git stash show -p, чтобы просмотреть подробный разностный отчет (diff) последнего сохраненного состояния (stash), что позволит вам увидеть точные строки, которые были добавлены, удалены или изменены. Наконец, вы узнаете, как проверить несколько сохраненных состояний (stashes), чтобы найти нужные вам изменения.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/DataManagementGroup(["Data Management"]) git/BasicOperationsGroup -.-> git/diff("Compare Changes") git/DataManagementGroup -.-> git/stash("Save Changes Temporarily") subgraph Lab Skills git/diff -.-> lab-560103{{"Как проверить, содержит ли хранилище (stash) Git определенные изменения"}} git/stash -.-> lab-560103{{"Как проверить, содержит ли хранилище (stash) Git определенные изменения"}} end

Выполнение команды git stash show -p

На этом этапе мы научимся проверять изменения, сохраненные в хранилище Git (Git stash). Когда вы используете команду git stash, Git сохраняет ваши несохраненные изменения. Чтобы увидеть, что именно было сохранено, вы можете использовать команду git stash show.

Сначала внесем некоторые изменения в файл в нашем репозитории my-time-machine. Если вы не находитесь в соответствующей директории, перейдите в нее:

cd ~/project/my-time-machine

Теперь добавим новый контент в файл message.txt. Используем команду echo с оператором >>, чтобы добавить текст в конец файла, не перезаписывая существующий контент.

echo "Adding a new line for stashing." >> message.txt

Вы можете проверить содержимое файла с помощью команды cat:

cat message.txt

Вы должны увидеть как исходную строку, так и новую:

Hello, Future Me
Adding a new line for stashing.

Теперь сохраним эти изменения в хранилище. Помните, что сохранение в хранилище позволяет сохранить несохраненные изменения, чтобы вы могли перейти к другой задаче и вернуться к этим изменениям позже.

git stash save "Added a line for stashing demo"

Вы должны увидеть сообщение, указывающее, что изменения были сохранены:

Saved working tree and index state On branch master: Added a line for stashing demo

Теперь, когда изменения сохранены в хранилище, используем команду git stash show, чтобы посмотреть, что находится в хранилище.

git stash show

Эта команда предоставляет сводку изменений в последнем сохраненном состоянии (stash). Вы, возможно, увидите такой вывод:

 message.txt | 1 +
 1 file changed, 1 insertion(+)

Это говорит нам, что один файл (message.txt) был изменен, и было добавлено одну строку.

Чтобы увидеть фактическое содержимое изменений, нам нужно добавить флаг -p (который означает "patch"). Это покажет разностный отчет (diff), как и команда git diff.

git stash show -p

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

diff --git a/message.txt b/message.txt
index <some_hash>..<some_hash> 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+Adding a new line for stashing.

Строки, начинающиеся с +, указывают на добавленные строки. В данном случае мы добавили строку "Adding a new line for stashing."

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

Поиск изменений в разностном отчете хранилища (stash diff)

На предыдущем этапе мы использовали команду git stash show -p для просмотра изменений в хранилище (stash). Иногда вывод разностного отчета (diff) может быть очень длинным, особенно в крупных проектах. В таких случаях вы, возможно, захотите найти определенные изменения в разностном отчете хранилища.

Вывод разностного отчета Git представляет собой обычный текст, поэтому вы можете передавать его в стандартные инструменты командной строки Linux, такие как grep, для поиска шаблонов.

Попробуем найти строку, которую мы добавили на предыдущем этапе: "Adding a new line for stashing."

Убедитесь, что вы все еще находитесь в директории ~/project/my-time-machine.

cd ~/project/my-time-machine

Теперь выполните команду git stash show -p и передайте ее вывод в grep. Мы будем искать слово "stashing".

git stash show -p | grep "stashing"

Вы должны увидеть строку, содержащую слово "stashing", в выводе разностного отчета:

+Adding a new line for stashing.

Это показывает, как можно использовать grep для фильтрации вывода команды git stash show -p и поиска определенных строк или шаблонов в сохраненных изменениях.

Вы можете использовать любые опции grep для уточнения поиска. Например, можно использовать -i для регистронезависимого поиска или -C для отображения строк контекста вокруг совпадения.

Возможность поиска в разностном отчете хранилища - это мощный метод, особенно когда у вас есть несколько сохраненных состояний (stashes) или крупные хранилища. Он помогает быстро найти интересующие вас изменения, не нужно вручную прокручивать весь вывод разностного отчета.

Тестирование нескольких сохраненных состояний (stashes)

В реальных сценариях вам может понадобиться несколько раз сохранять изменения в хранилище (stash). Git позволяет иметь несколько сохраненных состояний (stashes), которые управляются как стек. Самое последнее сохраненное состояние находится на вершине стека и обозначается как stash@{0}. Более старые сохраненные состояния обозначаются как stash@{1}, stash@{2} и так далее.

Создадим еще один набор изменений и сохраним их в хранилище, чтобы посмотреть, как это работает.

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

cd ~/project/my-time-machine

Теперь добавим другую строку в файл message.txt:

echo "Adding a second line for another stash." >> message.txt

Проверьте содержимое файла:

cat message.txt

Теперь вы должны увидеть три строки:

Hello, Future Me
Adding a new line for stashing.
Adding a second line for another stash.

Теперь сохраним эти новые изменения в хранилище:

git stash save "Added a second line for stashing demo"

Вы должны увидеть сообщение, указывающее на создание нового сохраненного состояния:

Saved working tree and index state On branch master: Added a second line for stashing demo

Чтобы увидеть список сохраненных состояний, используйте команду git stash list:

git stash list

Вы должны увидеть что-то вроде этого:

stash@{0}: On master: Added a second line for stashing demo
stash@{1}: On master: Added a line for stashing demo

Обратите внимание, что самое последнее сохраненное состояние ("Added a second line...") - это stash@{0}, а предыдущее ("Added a line...") - stash@{1}.

Вы можете использовать команду git stash show -p с идентификатором сохраненного состояния, чтобы просмотреть содержимое определенного сохраненного состояния. Например, чтобы просмотреть первое сохраненное состояние, которое мы создали (stash@{1}):

git stash show -p stash@{1}

Это покажет разностный отчет (diff) для изменений в stash@{1}:

diff --git a/message.txt b/message.txt
index <some_hash>..<some_hash> 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+Adding a new line for stashing.

А чтобы просмотреть самое последнее сохраненное состояние (stash@{0}):

git stash show -p stash@{0}

Это покажет разностный отчет (diff) для изменений в stash@{0}:

diff --git a/message.txt b/message.txt
index <some_hash>..<some_hash> 100644
--- a/message.txt
+++ b/message.txt
@@ -2 +2,2 @@
 Adding a new line for stashing.
+Adding a second line for another stash.

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

Резюме

В этом практическом занятии (lab) мы научились проверять содержимое хранилища (stash) Git с помощью команды git stash show. Мы начали с внесения изменений в файл, а затем сохранили эти изменения с описательным сообщением с использованием команды git stash save. Затем мы использовали git stash show для получения сводки о внесенных изменениях и, что более важно, git stash show -p для просмотра подробного разностного отчета (diff) сохраненных изменений, что позволило нам увидеть конкретные строки, которые были добавлены или изменены.

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