2016-02-05 2 views
0

В моем местном репо у меня есть 1 - 110. Удаленное репо начинается с 1 - 109. В промежуточный момент другой человек в команде нажал кнопку фиксации на удаленный. Теперь 1-110 также. Преодолевая свою местную ветвь GitHub получает:interstitial commit на дистанционном Repo запрещает push

не удалось нажать несколько рефов на «https://github.com/theProject.git» намек: Обновления были отклонены, так как удаленный содержит работу, которую вы делаете намек: не на местном уровне.

Итак, я применил вопрос фиксации 110 эквивалентным образом в своем локальном коммите (110). Поэтому мне нужно нажать, как будто удаленный 110 никогда не был добавлен. Могу ли я удалить фиксацию на github, чтобы избежать столкновения? Или есть способ, которым git обрабатывает это более изящно?

+0

Возможный дубликат [Что делает «Git push non-fast-forward updates были отклонены» означает?] (Http://stackoverflow.com/questions/4684352/what-does-git-push-non-fast-forward -updates-are-reject-mean) – sleske

+0

Это стандартная функция git - вы можете нажать только после получения всех обновлений из репо. Прочитайте связанный дубликат или http://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows, в частности, часть о «изменениях без перемотки вперед». – sleske

ответ

0

Просто сделайте git pull, чтобы получить и слить последнюю фиксацию с вашего пульта непосредственно на локальный. Если происходит конфликт с объединением, разрешите его вручную, затем git push origin.

Если этот другой человек не против, чтобы вы воровали кредит, вы могли бы просто надавить на git push -f origin.

+0

какой смысл тянуть? я ясно дал понять, что хочу удалить commit 110 на удаленном репо и заменить его на commit 110 из моего локального? по существу, я потяну его и ничего не сделаю с ним. –

+0

Если вы потянете его, то фиксация будет зачислена на оригинального пользователя, и вы можете по-прежнему нажать свои собственные изменения на пульте дистанционного управления после того, как вы потянете. Я предложил альтернативное решение «git push -f origin», которое заменит вашу удаленную историю фиксации на вашу локальную, по сути удаляя commit 110 на удаленном компьютере. – riwu

0

Когда такая ситуация случается (и это происходит постоянно), правильная вещь - не пытаться сделать так, чтобы ваш 110 соответствовал его 110. Вместо этого сделайте git pull, который создаст фиксацию, в которой есть и ваши 110 и его 110 в качестве родителей, затем нажмите эту фиксацию. Как только его 110 вытащили на дистанционное репо, вы можете считать его «установленным в камне». Не путайте с принудительным нажатием, это только усложнит вас.