Конфликты с `git rebase` - PullRequest
       17

Конфликты с `git rebase`

6 голосов
/ 12 августа 2010

Итак, вчера я опубликовал вопрос о некоторых странных конфликтах, когда я попытался переназначить ветку upstream в свою локальную ветку темы.

В конце я использовал git rebase --merge upstream и решилмного конфликтов в файлах, которых я не затрагивал со времени предыдущей перебазировки.

В таком случае я понимаю, что перебазирование отключает мои коммиты от этой ветки тем, применяет коммиты от ветки восходящей ветки изатем применяет (как патчи) мои коммиты поверх тех.Таким образом, в конечном итоге это операция перемотки вперед.Чего я не понимаю, так это ... почему у меня возникают конфликты слияний с теми коммитами, которые приходят из апстрима?Применяются ли они как патчи?Я думал, что это просто ... «сваривание» некоторых коммитов поверх предыдущего коммита, который пришел из той же ветки?

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

UPDATE

Я только что заметил, что некоторые из коммитов, перенесенных из апстрима в мою ветку тем, имеютих идентификатор SHA-1 изменился.Кто-нибудь знает, что может заставить Git сделать с этим?Может ли это быть переключатель --merge?

Моя версия git 1.5.6.5

1 Ответ

3 голосов
/ 07 января 2011

Rebase переписывает историю. Если вы перебазируете коммиты, которые уже были перенесены на удаленный компьютер, вы попадаете в мир боли. Еще хуже, если вы продолжите ребазировать, как это. У Rebase есть свои преимущества , иногда , но это инструмент IMO специальности , а не инструмент casual , как слияние.

и затем применяет (как патчи) мои коммиты поверх этих.

Да, как новые коммиты

Итак, это операция перемотки вперед

Нет. Перемотка вперед - это просто перемещение указателя HEAD этой ветви. Вы вводите новые объекты удаленно, а затем применяете исправления.

Если ваш локальный и удаленный последний раз синхронизировались в A1, и, скажем, вы добавили (локально) A2 и A3 коммитов и обнаружили, что удаленный добавил B1 и B2, перебазировка будет копите A2 и A3, опускайте B1 и B2 (должно быть ускоренное ускорение, так как они имеют общего потомка A1), а затем применяйте патчи для A2 и A3 как новые коммиты (отсюда новый SHA-1) A2' и A3'.

Итак, теперь ваша местная история: A1 - B1 - B2 - A2' - A3' который не является перемоткой вперед.

...