Ответ 1
Короткий ответ
git stash
отличает изменения, которые у вас есть от вашего индекса, и тот, который у вас есть в рабочем дереве, и создает фиксации для обоих из них.
Длинный ответ
Некоторые фон
Используя git, возможно, что изменения, которые у вас есть в рабочем дереве (файлы, с которыми вы работаете напрямую), отличаются от изменений, которые вы указали в индексе.
Добавление только ограниченного количества файлов в индекс или с помощью git add --patch
даже добавление отдельных измененных строк в файл оставит ваш индекс в другом состоянии в качестве рабочего дерева.
Это хорошо, потому что он позволяет создавать коммиты, которые фокусируются на одной конкретной задаче/функции.
Возможно даже, что у вас есть изменения в вашем индексе, которые больше не являются частью вашего рабочего дерева. Вы можете протестировать его, добавив некоторые изменения в индекс (git add
), вручную удалив их из файла, а затем создав фиксацию (git commit
).
Конец все равно будет содержать изменения, которые вы добавили в первую очередь, хотя они больше не существуют в вашем рабочем дереве.
Если вам трудно понять разницу между рабочим деревом и индексом, вы можете взглянуть на этот вопрос.
Что именно происходит?
Теперь утверждение с самого начала должно иметь больше смысла. Один "фиксация закладок" содержит все изменения, которые у вас были в рабочем дереве (файлы, с которыми вы работаете напрямую), а другой содержит изменения, которые вы добавили в свой индекс.
По умолчанию git stash pop
или git stash apply
только пытается восстановить изменения, которые у вас были в рабочем дереве, и игнорирует изменения, внесенные вами в индекс.
Можно указать git stash
попытаться восстановить свой индекс, используя флаг --index
(git stash (pop|apply) --index
).