Небольшая проблема

Я использую git с моим другом. Я сделал несколько коммитов, а мой друг не обновил свой локальный репозиторий и нажал с аргументом -f:

git push -f origin master

Теперь на гит-сервере (гитхабе) мои коммиты уничтожены, а последний коммит — мои друзья. Но у меня есть история коммитов локально. Можно ли их как-то слить обратно в мастер? Или я должен сделать это руками с самой новой версией?


person Max Frai    schedule 22.10.2010    source источник


Ответы (3)


Похоже, ваш друг изменил что-то, уже опубликованное в общедоступном репозитории. См. http://progit.org/book/ch3-6.html. Начните с сжигания вашего друга.

Обычно git pull должен вызывать слияние на вашей стороне. Вы всегда можете скопировать весь репозиторий в качестве резервной копии на всякий случай. Также вы можете просто скопировать изменения из вашей последней версии в новую кассу и зафиксировать их все как одну фиксацию.

person Wernight    schedule 22.10.2010

Я не проверял это, но я думаю, что заставлю ваши коммиты публиковаться на github (таким образом, снова переписав историю), пусть ваш «друг» подтянет ваши изменения, перебазирует его изменения, а затем подтолкнет его изменения вверх . Таким образом, вы получите оба изменения в одно и то же место.

Хорошее эмпирическое правило: НИКОГДА НЕ ПРИНУЖДАЙТЕ КОММИТ В GITHUB :) Сделайте это один раз, чтобы вернуть репозиторий в то состояние, в котором он был до того, как ваш «друг» все испортил:

# on your machine
git push origin master --force

#now your "friend's" working copy is fairy screwed up, so on his machine:
git checkout -b screwed_up #checks out a new branch called screwed_up
git pull origin master # pulls in your changes
git checkout master #checks out his version with his changes
git rebase screwed_up #moves his changes to the end of your changes (see git graphs for more details)
git commit -am 'your message here'
git push origin master #pushes his changes, which are now merged with your changes back to github
person brycemcd    schedule 22.10.2010

Отодвинуть свой собственный локальный коммит — это один из способов (git push origin master --force), но он стирает вклад вашего друга.

Ты мог:

  • переименуйте master на GitHub (см. «переименование удаленной ветки git")
  • извлеките эту ветку «friend_master» из GitHub и перебазируйте ее поверх своего мастера, интегрируя вклады вашего друга и проверяя их.
  • git push origin master (воссоздание основной ветки с полным содержимым)

Тогда ваш друг может просто сбросить свою локальную ветку master на origin/master.

person VonC    schedule 05.10.2012