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) $