Короткий ответ (уже дано @Alex в комментариях): git reset --hard HEAD^
, но только если есть слияние совершить (в противном случае вы просто копируете один совершить с вашей быстрой перемотки вперед).
Длинная версия с объяснением:
git pull
действительно только git fetch
следует git merge
(если не переопределить с --rebase
, как вы обратите внимание). Таким образом, вы просто должны увидеть, если вы получили фактическое слияние совершить или нет:
$ git pull
Updating 171ce6f..523bacb
Fast-forward
mp.py | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
create mode 100644 mp.py
В этом случае не было никакого слияния коммит, просто быстро вперед, поэтому никаких проблем, нет никаких изменений, пересчитать динамические! Если вы делаете git log
, вы увидите недостаток-merge-commit, особенно если вы используете графические элементы ниже.
Давайте объединимся.
$ git reset --hard HEAD^
HEAD is now at 171ce6f ignore *.log files
[теперь я один за remotes/origin/master
]
$ echo '# pointless comment' >> selfref.py
$ git add selfref.py
$ git commit -m 'added to force merge'
[master 260e129] added to force merge
1 files changed, 1 insertions(+), 0 deletions(-)
$ git pull
Merge made by recursive.
mp.py | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
create mode 100644 mp.py
Мы можем видеть, что это произошло, даже если выше текст отсутствует, с:
$ git log --graph --decorate --abbrev-commit --pretty=oneline
* c261bad (HEAD, master) Merge branch 'master' of [ssh url]
|\
| * 523bacb (origin/master, origin/HEAD) add multiprocessing example
* | 260e129 added to force merge
|/
* 171ce6f ignore *.log files
Мы хотим получите имя локального филиала master
, чтобы указать (в данном случае) 260e129. К счастью, это очень легко назвать:
$ git rev-parse HEAD^
260e1297900b903404c32f3706b0e3139c043ce0
(Другой родитель текущего, двух родителей, слияние совершить это HEAD^2
.) Итак:
$ git reset --hard HEAD^
HEAD is now at 260e129 added to force merge
и теперь мы можем перебазироваться на remotes/origin/master
(I будете использовать очень короткое имя, origin
, чтобы назвать это):
$ git rebase origin
First, rewinding head to replay your work on top of it...
Applying: added to force merge
Теперь граф-у журнала показывает одну строку:
$ git log --graph --decorate --abbrev-commit --pretty=oneline
* 4a0b2e2 (HEAD, master) added to force merge
* 523bacb (origin/master, origin/HEAD) add multiprocessing example
* 171ce6f ignore *.log files
Из всего этого вы должны быть в состоянии выяснить, что делать, если вы запустите git pull
, и он жалуется, что слияние не выполняется. :-)
я догадываюсь 'мерзавец сбросить --hard' назад, прежде чем тянуть и повторить тянуть путь. – Alex
Спасибо. Не могли бы вы разместить это как ответ, а не комментарий? –