Все еще изучаю GIT. Пытался синхронизировать мои локальные репозитории с фиксацией удаленных репозиториев в стиле «центральных репозиториев». Первым шагом было получение источника:

git fetch origin
remote: Counting objects: 1, done.
remote: Total 1 (delta 0), reused 1 (delta 0)
Unpacking objects: 100% (1/1), done.
From ssh://github.com/XXXXXX/ZZZZZZZZ
   bc2afff..3b3c8ee  master     -> origin/master

Потом проверил статус и ветку.

git status
# On branch master
# Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
#
nothing to commit (working directory clean)

git br
* master

Потом попробовал --ff-only.

git merge --ff-only origin master
fatal: Not possible to fast-forward, aborting.

Хорошо, сделайте слияние не-ff:

git merge origin master
Fast-forwarding to: origin
Already up-to-date with master
Merge made by the 'octopus' strategy.

Проверил фиксацию:

git show 4cbd3
...snip...
Merge branch 'master', remote-tracking branch 'origin'

Похоже, что было выполнено слияние не-ff. Результат слияния «Fast-fowarding to: origin» сбивает с толку - что он пытается мне сказать? Что мне не хватает? Спасибо!

0
Art Swri 7 Янв 2014 в 03:47

1 ответ

Лучший ответ

В отличие от, например, git push, git merge не принимает имя пульта дистанционного управления в качестве аргумента, поэтому, когда вы говорите git merge origin master, вы фактически говорите "сделайте слияние осьминога из 'origin' и 'master ' ветви". Вам следовало запустить вот что:

git merge origin/master

Видимо у вас есть ветка с названием origin. Должен ли он быть там, или вы его создали по ошибке?

Я не уверен, почему у вас возникает несовместимое поведение между git merge origin master и git merge --ff-only origin master, но это не имеет особого значения.

1
Magnus Bäck 7 Янв 2014 в 06:01