Подтвердить что ты не робот

Git втянуть в неправильную ветку

Сам я и еще один разработчик сливались и подталкивали нашу работу к не-мастер-ветки, называемой инструментальной. Таким образом, мы не повлияли на остальную часть команды. Моя ветка темы называлась DPM-93, и мой рабочий процесс git был таким.

# do some work
git checkout DPM-93
git commit -m "did some work"

# catch up
git checkout toolwork
git pull origin toolwork

# rebase my topic branch
git checkout DPM-93
git rebase toolwork

# merge and push my changes
git checkout toolwork
git merge --no-ff DPM-93
git push origin toolwork

Это в основном работало нормально, пока я случайно не выпустил эти команды git

git checkout toolwork
git pull origin master

В этот момент в инструменте для веток появилось множество новых вещей, и я не уверен, как избавиться от него, не удалив мое рабочее пространство и повторное клонирование из репо.

Есть ли способ вернуть это состояние в состояние до вытягивания?

4b9b3361

Ответ 1

git reset --hard ORIG_HEAD 

Из git reset справочная страница (если вы только что нажали):

Отменить слияние или вытащить

$ git pull                         (1)
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard                 (2)
$ git pull . topic/branch          (3)
Updating from 41223... to 13134...
Fast-forward
$ git reset --hard ORIG_HEAD       (4)
  • Попробуйте обновить с восходящего потока, что привело к множеству конфликтов; вы не были готовы тратить много времени на слияние прямо сейчас, поэтому вы решили сделать это позже.
  • "pull" не выполнил слияние, поэтому "git reset --hard", который является синонимом "git reset --hard HEAD", очищает беспорядок от индексного файла и рабочего дерева.
  • Объединить ветвь темы в текущую ветку, что привело к быстрой перемотке вперед.
  • Но вы решили, что ветвь темы еще не готова для общественного потребления.
    "pull" или "merge" всегда оставляет исходный кончик текущей ветки в ORIG_HEAD, поэтому перезагрузка жестко привязывает ваш индексный файл и рабочее дерево к этому состоянию и сбрасывает подсказку от ветки до этой фиксации.

Подробнее см. HEAD и ORIG_HEAD.

Ответ 2

Reset главная ветвь:

git reset --hard origin/master

Ответ 3

Вы можете использовать git log, чтобы найти SHA-1 ревизии, которую хотите возглавить ветки toolwork, затем используйте git reset --hard <SHA1>, чтобы вернуть рабочую копию в эту ревизию.

Запустите все сначала! И перечитайте страницу руководства для git reset, чтобы убедиться, что она делает то, что вы хотите.

EDIT: О да, ORIG_HEAD должен содержать правильный SHA-1. Но сначала проверьте.

Ответ 4

Недавно я сделал аналогичную вещь и использовал более простое решение на основе этого ответа.

Предполагая, что состояние ветки toolwork, которую вы хотите вернуть в , было нажато на origin, вы можете просто сделать

git fetch origin
git reset --hard origin/toolwork

В моем случае значение ORIG_HEAD было перезаписано другим слиянием в другой ветке, и для этого мне не пришлось беспокоиться о поиске правильной фиксации в журнале.