2012-04-10 2 views
2

я уже смотрел на вопросымерзавец перебазироваться причины происхождения/мастер и мастер расходиться

git rebase and git push: non-fast forward, why use?

и

master branch and 'origin/master' have diverged, how to 'undiverge' branches'?

Я до сих пор не ясно, что мне нужно в этом конкретном случае. Сначала у меня был источник/мастер и мастер. Последовательность фиксаций на обоих является

---o---A---B 

теперь совершить еще два коммиты на моем локальном хранилище, так что у меня есть

---o---A---B---C---D 

Теперь я сделал перебазироваться, потому что я хотел, чтобы изменить порядок фиксаций. Итак, мой хозяин сейчас: -

---o---A---C---D---B 

В то время как мое происхождение/хозяин по-прежнему находится в первой ситуации. Теперь, если я пытаюсь сделать git push, он отказывается выдвигать его, потому что мастер и источник/мастер расходятся. Как я могу переместить эту перестановку в исходное?

ответ

2

Вы можете заставить его:

git push -f origin master 

Будьте осторожны. Это фактически изменяет историю по происхождению, так что сделайте это, только если вы знаете, что это не сломает ничего для других разработчиков.

В целом не рекомендуется переустанавливать фиксации, которые уже были перенесены в удаленный/центральный репозиторий.

+0

Хм. Было бы безопаснее/проще, если бы я переместил свои изменения в состояние 2 в исходное, затем ssh-ed на удаленный компьютер и сделал перезагрузку в удаленном репозитории, а затем сделал git pull на моей локальной машине? Или это хуже того, что я пытаюсь сделать? – owagh

+0

@owagh, это метод roundabout для такого же эффекта и имеет ту же проблему - изменение истории на удаленном репо может вызвать проблемы для других разработчиков, использующих его. –

+0

Ohk. Лемм попробуй и посмотри, что получится. – owagh

0

Я испытал это несколько раз, и сначала я потянулся, как сказал git, который попытается объединить мои прошлые изменения с моими новыми локальными изменениями - не в порядке. В основном, когда ваша локальная ветвь репо отклонилась от вашей удаленной ветви, вы также должны пересобрать свою удаленную ветвь. Например:

git:(branch)$ git commit -m "my fix." 
git:(branch)$ git checkout master 
git:(master)$ git rebase branch 
git:(master)$ git rebase origin/master 
git:(master)$ git push origin master 

большой успех!

Смежные вопросы