Git: Відхиліть усі зміни на місцевому відділенні


117

У мене є локальна галузь теми, яка відстежує віддалену гілку. На думку аргументів, скажіть, що історія чинів виглядає так:

A--B--C--O1--O2--O3 (origin/phobos)
       \
         L1--L2--L3 (phobos)

Переглянувши відносну історію фіксації, я хочу відкинути всі зміни в місцевій phobosгілці і повернути її до прямої копії origin/phobos, щоб локальна історія виглядала так:

A--B--C--O1--O2--O3 (phobos origin/phobos)

Я дійсно не хочу, щоб локальні зміни phobosгілки, і я дійсно не хочу, щоб згодом з'являлися злиття у сховищі початківців. (Отже, просто злиття - це не те, що я маю на увазі.)

Це здається, що це має бути справді просто, але мій google-fu зірвав мене. Як це зробити?

Відповіді:


79

Видаліть гілку, а потім створіть її знову:

$ git branch -D phobos
$ git checkout --track -b phobos origin/phobos

37
Проблема такого підходу проти скидання голови гілки полягає в тому, що видалення гілки знімає рефлог гілки. Скидання гілки, з іншого боку, не тільки зберігає рефлог, але фактично записує скидання в рефлог. Це робить операцію легко оборотною пізніше, якщо потрібно.
Dan Molding

9
@Electrons_Ahoy запропонував би змінити прийняту відповідь тут на Дану (щоб люди, як я, які гуглили, як це зробити, швидше за все, оберуть більш безпечний метод).
Стів Чемберс

4
@ Відповідь DanMoulding не передбачає видалення локальної гілки, коли вона не потрібна. Це набагато безпечніше.
брма

@brma: Як так? Це все ще просто вказує гілку на новий комітет.
mipadi

5
Відповідь Дена Молдінга безпечніша. Я думаю, ви повинні вибрати саме цю.
Даніель Apt

330
git checkout phobos
git reset --hard origin/phobos

Це вказує Git скинути заголовок phobosна той самий фільтр origin/phobos, що і, і оновити робоче дерево на відповідність.


35
IMO це має бути прийнятою відповіддю; він видає команду «скинути» для пересадки вказівника гілки, замість того, щоб виконувати операцію з видаленням / відтворенням.
vdboor

Насправді я спробував це спочатку, і він кинув тонну помилок, зробивши локальну копію майже непридатною. Видалення / відтворення, можливо, було менш елегантним, але мені не потрібно було задавати будь-які подальші запитання.
Electrons_Ahoy

3
@Electrons_Ahoy: Хм, це точно не нормально. Здійснення цього скидання, як правило, може бути безпроблемним, якщо ваше РЕПО працює у справному стані.
Dan Molding

або навіть якщо це химерно. Використовуйте git reflog, щоб знайти свій шлях додому, якщо ви "випадково" видали цю команду, не читаючи, що вона робить. :)
dbn

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