Маленькая неприятная неприятность - PullRequest
2 голосов
/ 22 октября 2010

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

git push -f origin master

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

Ответы [ 3 ]

3 голосов
/ 22 октября 2010

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

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

1 голос
/ 22 октября 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
0 голосов
/ 05 октября 2012

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

Вы могли бы:

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

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

...