git restore
git restore: відновити (англ. restore) робоче дерево та/або область підготовки
git restore повертає файли до відомого стану. За замовчуванням команда замінює файли робочого дерева вмістом області підготовки. Якщо в області підготовки пусто, результат буде таким самим, як в останньому коміті.
З опцією --staged команда скидає область підготовки до стану останнього коміту (або коміту, вказаного через --source), а робоче дерево не чіпає. Саме так можна прибрати зміни з області підготовки, не втрачаючи своїх правок.
Команда git restore з'явилася в Git 2.23.0 і стала прицільним способом скасувати локальні зміни чи прибрати файли з області підготовки. Якщо звичніше робити все через git reset — звичку можна лишити, але git restore важче використати не за призначенням: команда чіпає лише робоче дерево та область підготовки, а не історію комітів.
Сценарії використання
-
Відновити робоче дерево (в області підготовки пусто): у файлах з'явилися зміни, які не потрібні. Поверни робоче дерево до останнього коміту.
Рішення:
git restore --worktree .АБО простоgit restore ., бо режим--worktreeувімкнений за замовчуванням. -
Відновити область підготовки, зберегти робоче дерево: в область підготовки потрапило забагато. Поверни область підготовки до останнього коміту, а правки в робочому дереві залиш.
Рішення:
git restore --staged . -
Відновити робоче дерево, зберегти область підготовки: потрібне вже підготовлено, а потім додалися нові правки, які не подобаються. Поверни робоче дерево до того, що лежить в області підготовки.
Рішення:
git restore --worktree .АБОgit restore . -
Відновити область підготовки та робоче дерево: хочеться викинути все — і підготовлене, і ні. Поверни і те, і те до останнього коміту.
Рішення:
git restore --worktree --staged .
Приклади
Скасувати зміни в конкретному файлі:
git restore README.mdСкасувати зміни в усіх файлах поточної директорії (шлях . означає «тут»):
git restore .Прибрати файл з області підготовки, але залишити його правки в робочому дереві:
git restore --staged README.mdПрибрати з області підготовки все й повернути робоче дерево до останнього коміту:
git restore --worktree --staged .Відновити файл із конкретного коміту.
git restore --source a1b2c3d4 README.mdВибрати в інтерактивному режимі, які зміни залишити, а які скасувати:
git restore --patchАбо коротша форма:
git restore -p.gitignoregit checkoutgit configgit taggit worktree