Git тянет в неправильную ветку
Я и еще один разработчик объединяли и продвигали нашу работу в не-мастерскую ветку под названием toolwork. Таким образом, мы не повлияли на остальную часть команды. Моя тема ветки называлась ДПМ-93 и моей работы ЖКТ это.
# 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
в этот момент в branch toolwork появилась куча новых вещей, и я не уверен, как избавиться от нее, не удалив мое рабочее пространство и повторное клонирование из репозитория.
есть ли способ вернуть это состояние, прежде чем тянуть?
5 ответов:
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
, поэтому сброс hard к нему возвращает ваш индексный файл и рабочее дерево обратно в это состояние и сбрасывает кончик ветви до этого фиксации.посмотреть
HEAD
иORIG_HEAD
дополнительные.
можно использовать
git log
чтобы найти SHA-1 ревизии вы хотите быть во главе вашегоtoolwork
филиала, а затем использоватьgit reset --hard <SHA1>
чтобы вернуть рабочую копию к этой редакции.резервное копирование все в первую очередь! И перечитайте man-страницу для
git reset
чтобы убедиться, что он делает то, что вы хотите.EDIT: О да, ORIG_HEAD должен содержать правильный SHA-1. Но сначала проверь.
недавно я сделал аналогичную вещь и использовал более простое решение, основанное на ответ.
предполагая, что состояние
toolwork
ветвь, к которой вы хотите вернуться была отодвинута доorigin
, вы можете просто сделатьgit fetch origin git reset --hard origin/toolwork
в моем случае, значение
ORIG_HEAD
был перезаписан другим слиянием в другой ветке, и при этом мне не нужно было беспокоиться о поиске правильной фиксации в журнале.
то, что сработало для меня просто
git reset --hard
Я сделал это из локального репозитория с неудачным слиянием / pull:
Laptop@LAPTOP-xxxxxxxx /d/Google Drive/xxxxxxx/Github/xxxxx (staging_ec2|MERGING) $ git reset --hard HEAD is now at 2d5a511 [last commit comment] Laptop@LAPTOP-xxxxxxxx /d/Google Drive/xxxxxxx/Github/xxxxx (staging_ec2) $