Як відмовитись від усіх змін, внесених до гілки?


116

Я працюю у відділенні (тобто design), і я вніс ряд змін, але мені потрібно відмовитися від них і скинути їх, щоб вони відповідали версії сховища. Я думав, git checkout designщо зроблю це, але це просто говорить про те, що я вже у відділенні designі що у мене є 3 модифіковані файли.

Як би я відкинув ці зміни і отримав гілку так, як вона стоїть зараз на віддаленому сервері?

Відповіді:


207

Примітка. Ви не можете цього скасувати .

Спробуйте git checkout -fце відкине будь-які локальні зміни, які не здійснюються у ВСІХ гілках і master.


86

git reset - твердий може допомогти вам, якщо ви хочете викинути все з моменту останнього вчинення


6
абоgit reset --hard HEAD^
мертві риби

28
git reset --hard HEAD^справді має бути прийнятою відповіддю. ОП не розпитували про інші гілки ...
vphilipnyc

2
Я спробував це, і я думаю, що це видалило все з мого останнього поштовху, а не лише останню прихильність.
Чейз Робертс

3
Я спробував скинути git --hard HEAD ^, і це все ще залишило купу файлів, що не відслідковуються. Тепер до google, як їх видалити однією простою командою.
Джон Дейгань

20
git diff master > branch.diff
git apply --reverse branch.diff

Ці кроки можуть бути дуже корисними, якщо вашою метою є встановлення стану певної гілки, рівного основній гілці. Для цього запустіть це всередині певної гілки, а потім видаліть файл [ім'я гілки] .diff, коли це буде використаноgit rm [branch name].diff
karolus

18

Якщо ви не хочете жодних змін designі, безумовно, хочете, щоб вони відповідали лише віддаленій гілці, ви також можете просто видалити гілку та відтворити її:

# Switch to some branch other than design
$ git br -D design
$ git co -b design origin/design            # Will set up design to track origin's design branch

7
також: дизайн git checkout; git reset - жорстке походження / дизайн
Dan

Я також
взяв

Якщо у вас є місцеві комісії в місцевому відділенні, які не знаходяться на віддаленні, це рецепт, на який я можу потрапити в дійсно заплутані ситуації. Я б точно не користувався цим рішенням.
erewok

1
@erewok: Ну, запитання конкретно говорить про те, що запитувач хоче відмовитись від усіх змін.
mipadi

І я не думаю, що ця відповідь цього не досягає.
erewok

7

@ Хочемо, занурення з git - це дуже гарний та простий підручник з git. він покаже вам, як скасувати зміни для таких випадків: нестандартних, поетапних та вчинених. лабораторії 14-18


2
Я просто хотів би сказати, що зараз я зробив занурення гетта .. через рік. ОІ! Я повинен був зробити це так швидше ...
Буде

1
Це потрібно Rubyвстановити. Що, мабуть, не завжди є вибором
Вішну,

5

Коли ви хочете скасувати зміни у вашій місцевій гілці, ви можете приховати ці зміни за допомогою команди git stash.

git stash save "some_name"

Зміни будуть збережені, і ви зможете їх отримати пізніше, якщо ви хочете або можете їх видалити. Після цього у вашій філії не буде жодного непосланого коду, і ви можете витягнути останній код з вашої основної гілки за допомогою git pull.



0

ПОВЕРНЕНИЙ метод відхилити всі зміни:

Я знайшов це питання після того, як після прийняття злиття і забуваючи перевірку розвиватися відразу ж після цього. Ви здогадалися: я почав змінювати декілька файлів безпосередньо на master . D'Oh! Оскільки моя ситуація навряд чи унікальна (ми все це зробили, чи не; ->), я запропоную зворотний спосіб, яким я відкидав усі зміни, щоб майстер виглядав так, як знову розвивався .

Зробивши a, git diffщоб побачити, які файли були змінені, та оцінив обсяг моєї помилки, я виконав:

git stash
git stash clear

Після першого внесення всіх змін, їх було видалено наступним чином. Усі зміни, внесені до файлів з помилкою в master, не відбулися і паритет відновлено.

Скажімо, я зараз хотів відновити ці зміни. Я можу це зробити. Перший крок - знайти хеш скрипту, який я щойно очистив / випав:

git fsck --no-reflog | awk '/dangling commit/ {print $3}'

Дізнавшись хеш, я успішно відновив незапущені зміни за допомогою:

git stash apply hash-of-cleared-stash

Я не дуже хотів відновити ці зміни, просто хотів підтвердити, що можу отримати їх назад, тому я очистив їх ще раз.

Інший варіант - застосувати скриньку до іншої гілки , а не видаляти зміни. Таким чином, з точки зору очищення змін, що відбулися внаслідок роботи на неправильній гілці, stashви отримуєте багато гнучкості для відновлення після бу-бу.

Anyhoo, якщо ви хочете зворотного способу очищення змін у гілці, вищевикладене є менш небезпечним способом у цьому випадку використання.


-1

git checkout -f

Цього достатньо для вашого запитання. Єдина річ, як тільки це зроблено, зроблено. Відміни немає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.