Я хочу сделать, git pull
но только до определенной фиксации.
A->B->C->D->E->F (Remote master HEAD)
Итак, предположим, моя local master
ГОЛОВА указывает на B
, а я хочу тянуть до E
. Что я должен делать ?
Это не подтягивание конкретной фиксации, это подтягивание к определенной фиксации.
git fetch
иgit merge E
.Ответы:
git pull
не что иное, какgit fetch
за которым следуетgit merge
. Итак, что вы можете сделать, этоgit fetch remote example_branch
git merge <commit_hash>
источник
git merge E
объединитсяE
вместе со всеми своими предкамиC
иD
(git знает это,A
иB
его не нужно объединять, потому что они уже были в вашей ветке). Если вы ТОЛЬКО хотите изменений,E
вам следуетgit cherry-pick E
вместо этого.Сначала получите последние коммиты из удаленного репо. Это не повлияет на ваш местный филиал.
Затем проверьте ветку удаленного отслеживания и сделайте журнал git, чтобы увидеть коммиты.
Возьмите хеш коммита, который вы хотите объединить (или только первые ~ 5 символов), и объедините этот коммит с мастером.
источник
git fetch
прежде чем писать такую ерунду. Кроме того, вы должны прочитать исходный вопрос и мой ответ. Если вы последуете моему ответу, вы не вернетесь «назад в историю», как я прямо указываю пользователюgit checkout master
. В целом, пожалуйста, не публикуйте материалы, если вы не на 50% понимаете, что делаете.git fetch origin
явно извлекает происхождение .Вы также можете вытащить последнюю фиксацию и просто отменить ее, пока не появится желаемая фиксация:
Замените
master
нужной веткой.Используйте git log, чтобы увидеть, к какой фиксации вы хотите вернуться:
Лично мне это сработало лучше.
По сути, это извлекает последнюю фиксацию, и вы вручную откатываете коммиты один за другим. Используйте git log, чтобы увидеть историю коммитов.
Хорошие моменты: работает как рекламируется. Вам не нужно использовать хеш фиксации или извлекать ненужные ветки.
Плохие моменты: вам нужно откатывать коммиты по одному.
ВНИМАНИЕ: Зафиксируйте / сохраните все ваши локальные изменения, потому что
--hard
вы потеряете их. Используйте на свой риск!источник
HEAD
прежде чем возвращаться - и я не знаю, что бы произошло, если бы вам пришлось разрешать конфликты. Но это решение позволяетgit pull --rebase
и вопреки тому, что было сказано, вы можете напрямую вернуться к предыдущимN
коммитам с помощьюgit reset --hard HEAD~N
(т.е. для 3 коммитовgit reset --hard HEAD~3
).Если вы объедините коммит в свою ветку, вы должны получить всю историю между ними.
Обратите внимание:
источник
Это работает для меня:
например
Это тянет 28eb00, ff39e4 и все, что было раньше, но не тянет f4d10ad. Он позволяет использовать pull --rebase и учитывает настройки pull в вашем gitconfig. Это работает, потому что вы в основном рассматриваете 28eb00 как ветку.
Для версии git, которую я использую, этот метод требует полного хэша фиксации - никаких сокращений или псевдонимов не допускается. Вы можете сделать что-то вроде:
источник