Як відмовити два попередні коміти?


83

Розглянемо такий сценарій:

  1. Розробник A робить коміт: коміт #n
  2. Розробник B робить коміт # n + 1
  3. Розробник A робить коміт # n + 2
  4. і зафіксуйте # n + 3

а потім виявляє, що у своєму коміті # n + 2 він ввів дефект.

Як може розробник Відкат його останніх 2-х комітів і продовження розвитку за комітом # n + 1 ?

Спробував git reset --hard HEAD~2* , але він повертається до коміту розробника #n .


2
git reset HEAD ~ 2 повинен скинутися до # n + 1 коміту, якщо ви витягли B комітів у цей момент. Ти їх тягнув?
Snowbear

1
... не раніше # n + 2 коміту. Це було: [0] Б натиснув commit# n + 1, [1] commitТед # n + 2, [2] невдало push, [3] pull, [4] push. Отже, на github тепер є коміт (# n + 2) та гілка Merge 'master' (# n + 3).
Marius Butuc

2
Якщо ви вже опублікували коміт, вам не слід використовувати скидання, щоб повернути його назад. (Якщо якийсь інший незнайомий розробник потягнув, це спричинить біль.) Натомість скористайтеся функцією "повернути" та зробіть новий коміт, який приведе вас до стану, який ви хочете. Ніколи не змінюйте опубліковану історію. Див. Book.git-scm.com/…
Вільям Персел

Відповіді:


122

Він повинен повернутися до коміту n + 1. Напевно, у вас також є коміт злиття. Ви також можете зробити agit reset --hard <sha1_of_where_you_want_to_be>

УВАГА!! --hardозначає, що будь-які незмінені зміни, які ви зараз маєте, будуть назавжди викинуті.


2
Як отримати sha1 віддаленого коміту (не зробленого мною)? Я спробував використати git reflog, але я можу отримати доступ лише до своєї локальної інформації про перезапис, наприклад, коміти #n, # n + 2, # n + 3 ... але не # n + 1
Marius Butuc

13
Я отримав sha1, який я хотів від a git log, але git push -fтакож потрібен був a , тому модифікації будуть відображені на github.
Marius Butuc

1
Так, але я не знав, що ви хочете також оновити пульт :)
Адам Димітрук

25
УВАГА!! --hardозначає, що будь-які незмінені зміни, які ви зараз маєте, будуть назавжди викинуті. Щоб повернутися до попереднього коміту без викидання вашої роботи, використовуйте --soft.
Ken M. Haggerty

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