#git #bitbucket
#git #bitbucket
Вопрос:
Я работаю над проектом с другим человеком, использующим git (на BitBucket)
Изначально у меня были мои коммиты:
my_commit_4
my_commit_3
my_commit_2
my_commit_1
Теперь я пошел проверять BitBucket неделю спустя, и это показывает:
his_commit_4
his_commit_3
his_commit_2
his_commit_1
his_commit_1
Включает в себя все коммиты my_commit_x
, плюс некоторые из его собственных дополнений.
Я попытался просмотреть reflog
, и у меня все еще есть мои коммиты локально. Я не могу извлечь из origin master
, потому что я получаю следующую ошибку:
From https://bitbucket.org/myaccount/myapp
* branch master -> FETCH_HEAD
1145d3e...fa3d2de master -> origin/master (forced update)
fatal: refusing to merge unrelated histories
Что именно произошло?
Есть ли способ заставить мои оригинальные коммиты снова отображаться в BitBucket?
Ответ №1:
У вас есть несвязанные истории, потому что, кем бы ни был другой человек, он удалил ваши коммиты полностью, заменив их все своими.
Вы можете удалить его коммиты и заменить их своими, взаимно. Вероятно, это не очень хорошая стратегия, но это вариант, при условии, что у вас есть разрешение на использование git push --force
(которое он, должно быть, использовал, чтобы удалить ваши коммиты и заменить их своими).
Вы можете объединить, несмотря на несвязанные истории. Это может быть легко или сложно. Для объединения, несмотря на несвязанные истории, используйте git merge --allow-unrelated-histories
. Git, по сути, добавит поддельный коммит непосредственно перед всеми своими коммит-ами и непосредственно перед всеми вашими коммит-ами, к которым подключаются все его и все ваши. Этот поддельный коммит полностью пуст. Следовательно, все файлы в его последнем коммите являются новыми, полностью созданными им; все файлы в вашем последнем коммите являются новыми, полностью созданными вами; и Git объединит эти файлы, взяв те файлы, которые уникальны для его коммита, и те файлы, которые уникальны для вашего коммита, и объявив конфликт слияния для всех оставшихся файлов, которые имеют одинаковое имя в обоих коммитах. Вам придется вручную объединить каждый из этих файлов.
Он может, конечно, затем использовать git push --force
снова, чтобы отменить всю вашу работу. Вероятно, вам следует убедиться, что он этого не сделает.
В конечном счете, способ решить эту проблему — поговорить с ним и выяснить, почему он удаляет ваши коммиты. Вероятно, это непреднамеренно, но если это сделано намеренно, то нет технического решения: это политическая проблема.