Отмяна на ангажименти в GitHub

Полезни статии за оформление за дизайнери на оформление

7 април 2015 г.

И в един момент беше направена промяна в хранилището, която след това беше ангажирана и изпратена до GitHub. Трябва обаче да се отървете от тази промяна - тя е погрешна.

Но как да направите това, ако коммитът вече е в GitHub? В интерфейса на услугата GitHub не намерих необходимия бутон за изтриване на определен ангажимент и по този начин върнах хранилището в желаното състояние.

Това е така, защото комитите в GitHub се управляват чрез локално хранилище. По-долу има три лесни стъпки, за да покажете как се прави това.

Първа стъпка

Първо, трябва да получите списък с хеш суми на последните фиксирания на хранилището. Това е разбираемо - трябва да имате дърво на фиксиране пред вас, за да видите къде да отидете. В дървото на фиксиране хеш сумите са точки на въртене, идентификационните номера на всеки от фиксираните транзакции:

По-долу е обобщеният изход от командата git log - четирите най-скорошни фиксации на хранилището:

Трябва да върна хранилището от състоянието, описано в commit ee3a2ae6888fb87d, в състоянието, записано в commit 6d92268e42eace0c .

Стъпка втора

За целта ще използвам командата за нулиране с превключвателя --hard. Тази команда ми подхожда, защото няма да запазвам промените, извършени в ee3a2ae6888fb87d, тъй като те са напълно погрешни.

Както е описано подробно в Revert Changes in Git, можете да изпълните тази задача с командата:

където 6d92268e42eace0c е началните 16 знака от хеша на коммита, към който искам да прескоча. Пълната форма на хеш-сумата от 40 знака може да бъде пропусната - 16 знака са достатъчни, за да идентифицират надеждно конкретен ангажимент.

След изпълнението на тази команда локалното хранилище ще бъде възстановено до състоянието, записано в ангажимента 6d92268e42eace0c. С други думи, отървах се от последните грешни промени и върнах хранилището в предишното му състояние.

Това обаче е само половината от битката, тъй като връщането е засегнало само локалното хранилище. Тази статия е предимно за отдалечено хранилище, хоствано на GitHub. Как да постигнете подобни промени в GitHub?

Изглежда просто! Достатъчно е да изпълните командата:

Но всъщност това няма да работи - Git няма да ви позволи да направите това. Поради причината, че в момента състоянието на локалното хранилище има по-ранна версия от състоянието на отдалеченото хранилище.

Вместо това Git ще ви подкани да изпълните команда git pull, за да заведете локалното хранилище в отдалеченото.

Стъпка трета

За да принудите Git да изпълни обратната задача - за да приведете отдалеченото хранилище до локалното, трябва да използвате ключа -f .

Тоест да принуди промени и по този начин да „каже“ на Git да синхронизира отдалеченото хранилище с локалното хранилище, въпреки факта, че последното има по-ранна версия:

Заключение

Сега, ако проверим състоянието на отдалеченото хранилище на сървъра GitHub, ще видим, че то е идентично със състоянието на локалното хранилище. Но най-важното - последният грешен коммит беше премахнат, което исках.