Як повернути головну гілку до тегу в git?


87

Ми маємо філії походження та розвитку. Початковий стан майстра позначено як tag_ABC.

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

Тепер ми хотіли б повернути майстра на блокпост tag_ABC. Як ми можемо це зробити?

Відповіді:


159

Ви можете зробити

git checkout master
git reset --hard tag_ABC
git push --force origin master

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


5
Таким чином усі гілки будуть штовхатися з силою. Можливо, ви захочете спробуватиgit push --force origin master
danza

1
Для довідки, щоб повернутися до попереднього коміту, ви можете зробитиgit reset --hard HEAD^
Geoff

1
BTW git reset --hard HEAD^може використовуватися кілька разів, щоб відступити по одному коміту за раз, тоді, якщо він на віддаленому, git push --force origin masterможе використовуватися.
Luke Wenke

Також скинути головну гілку місцевих копій інших людей до попередньої версії, git pullіgit reset --hard origin/master
Luke Wenke

Трохи порад після цього повернення, можна сказати команді: витягніть з головного відділення !! Дякую!!
JRichardsz

88

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

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

Припускаючи, що ваша гілка називається master, а тег, до якого ви хочете повернутися, називається 1.1.1

git checkout 1.1.1
git diff master > ~/diff.patch
git checkout master
cat ~/diff.patch | git apply
git commit -am 'Rolled back to version 1.1.1'
git push origin master

19
Це має бути прийнятою відповіддю, оскільки вона зберігає історію в цілості та не створює проблем для інших, у кого перевірено репо.
OpenUserX03

1
Це здається елегантним. Але я спробував повернути гілку qa до попереднього тегу і щойно отримав повідомлення про помилку виправлення. $ cat ../diff_qa.patch | git apply <stdin>: 55: кінцевий пробіл. <stdin>: 336: кінцевий пробіл. <stdin>: 12692: кінцевий пробіл. <stdin>: 12695: кінцевий пробіл. <li> {{$ tag ['rank'] + 1}}: <stdin>: 12706: кінцевий пробіл. помилка: помилка виправлення: .env.wholo: 1
rickatech

Я спробував кілька рішень, але жодне з них не спрацювало. Цей спрацював як шарм. Велике спасибі @John
Strabek

Це правильний спосіб зробити. Він не руйнує і зберігає всю історію
Нітін Бансал,

У мене це не працює. Я можу запускати перші 3 команди без будь-яких проблем, але коли я це роблю cat ~/diff.patch | git apply, це повідомляє мені error: unrecognized input. Будь-яка ідея? @NitinBansal, можливо, з тих пір, як ви нещодавно прокоментували?
Досвід111
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.