Як з Git: скасувати комісію

Іноді ви можете вносити зміни до свого репортажу Git, але тоді розумієте, що ви допустили помилку. Тепер ви хочете скасувати ці зобов’язання, щоб ваш код знову працював.


У цьому посібнику ми розглянемо команду скидання git для локальних та віддалених комісій у сховище.

Різниця між скиданням git та відновленням git

Важливо зрозуміти різницю між скиданням і поверненням комітетів під час використання Git.

  • Команда скидання git скасовує чинність, видаляючи попередні коміти із сховища та повертаючи Git HEAD до більш раннього фіксації. Деякі історії Git можуть бути втрачені, виконавши це, залежно від того, який варіант використовується.
  • Команда відновлення git скасовує вчинення, створюючи нову комісію, яка представляє попередній стан репозиторію. Жодна історія Git не буде втрачена цим шляхом.

Вже змінили зміни, і хтось ще потягнув ці зміни? Ви не повинні використовувати скидання git для скасування змін. Ви повинні скористатися відновленням git, як описано в нашому посібнику Git для відкату Git..

Використовуючи команду скидання git для скасування комісії

Для наступних прикладів припустимо, що наше місцеве дерево Git виглядає так:

1
2
3

    Х

    |

A-B-C

The Х являє собою нашу локальну, неспроможну зміну нашої Git HEAD, позначену символом С.

Скасувати комісію з назвою “С “Через помилку ми можемо виконати команду скидання git.

Залежно від потреб відстеження файлів, ви хочете використовувати команду скидання git з різними прапорами.

Випадок 1: Використовуйте скидання git та видаліть файли з області постановки

Ми можемо використовувати команду git reflog, щоб переглянути нашу історію Git.

Ми можемо використовувати git ls-файли, щоб побачити поточно встановлені файли для нашого проекту:

1
2
3
4
5
6
7
8
9
10

$ Git рефлог

f326d13 HEAD @ {0}: commit: Додано C

358d535 HEAD @ {1}: commit: Додано B

00b61d5 HEAD @ {2}: фіксація (початкова): Додано A

 

$ Git ls-файли

А
Б
С
Х

Зберігати відстежені файли з моменту фіксації С, але видаліть їх з індексу Git, ви можете запустити:

1 Скидання GIT HEAD ~ 1

Ви можете скористатись скороченням GIT від GIT ~ 1, щоб видалити фіксацію однієї передачі перед HEAD.

Якщо ви використовували HEAD ~ 5, це призведе до зняття комітету, який становить п’ять комітетів перед HEAD.

Зміни в індексі Git, також називається “місцем постановки”, буде втрачено, тому дерево Git тепер буде:

1
2
3

  Х

  |

А-Б

Що ми можемо підтвердити за допомогою цих команд:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

$ Git рефлог

358d535 HEAD @ {0}: скидання: перехід до HEAD ~ 1

f326d13 HEAD @ {1}: commit: Додано C

358d535 HEAD @ {2}: commit: Додано B

00b61d5 HEAD @ {3}: фіксація (початкова): Додано A

 

$ Git ls-файли

А
Б
 

$ Git статус

Про майстра відділення

Невикреслені файли:

  (використання "Git add …" включити до того, що буде вчинено)

 

        С

        Х

 

Коли ми просто використовуємо скидання git без прапорців, ми не видаляємо жодних файлів; вони просто не поставлені:

1
2

$ ls

A B C X

Однак ви видаляєте запис журналу для скидання, яке ви скинули:

1
2
3
4
5
6
7
8
9
10
11
12

$ Git журнал

прихилити 358d535bc5e06730e61d272be34a6d0e568f42af

Автор: Користувач < [email protected]>

Дата: вівторок 10 лютого 13:54:55 2015 -0500

 

    Додано В

 

фіксувати 00b61d53fe06ee672fa0497b175fb7bd89e26b72

Автор: Користувач < [email protected]>

Дата: вівторок 10 лютого 13:54:55 2015 -0500

 

    Додано A

Випадок 2: Використовуйте скидання git –софт та збережіть зміни у файлах

Якщо ви використовуєте прапор –soft, всі зміни відслідковуваних файлів та індексу Git зберігаються:

1 Скидання Git – програмна голова ~ 1

Будь-які інсценовані файли залишаються такими, а жодні файли фізично не видаляються:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

$ Git ls-файли

А
Б
С
Х
 

$ ls

A B C X

 

$ Git статус

Про майстра відділення

Внесення змін:

  (використання "Git скидання HEAD …" до нестабільності)

 

        новий файл: C

        новий файл: X

Використовуючи прапор –soft, ви все-таки видаляєте запис журналу для скиду, який ви скинули.

Випадок 2: Використовуйте скидання git –hard та видаліть усі зміни до файлів

Якщо ви використовуєте прапор –hard, всі зміни відслідковуваних файлів та індексу Git втрачаються:

1
2

$ Git скидання – тверда голова ~ 1

HEAD зараз на рівні 3bf1b55 Додано B

Усі файли після виконання комісії, яку ви скинули, не знімаються та фізично видаляються:

1
2
3
4
5
6
7
8
9
10

$ Git ls-файли

А
Б
 

$ ls

А Б

 

$ Git статус

Про майстра відділення

нічого не робити, робочий каталог чистий

Ви знову видаляєте запис журналу Git для комісії, яку ви скинули.

Спробуйте використовувати відновлення git, коли комісії вже натиснуті

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

Однак якщо ви дійсно хочете, ви можете застосувати ті ж дії, що і в попередньому розділі, щоб видалити деякі попередні Git-коміти.

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

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Adblock
    detector