Когда `git pull --rebase` доставит мне неприятности? - PullRequest
40 голосов
/ 07 апреля 2010

Я понимаю, что когда я использую git pull --rebase, git переписывает историю и перемещает мои локальные коммиты, чтобы они происходили после всех коммитов в ветке, из которой я только что извлек.

Чего я не понимаю, так это того, как это может быть плохо. Люди говорят о том, чтобы попасть в неприятности с git pull --rebase, где вы можете получить ветку, из которой другие люди не могут тянуть. Но я не понимаю, как это возможно, поскольку все, что вы делаете - это воспроизводите свои локальные, еще не общедоступные, коммиты поверх ветви, из которой вы извлекли. Так в чем же проблема?

Ответы [ 4 ]

25 голосов
/ 07 апреля 2010

Это проблема, только если вы опубликовали (отправили) некоторые свои коммиты, потому что их будет сложнее объединить с другими репо, которые уже имеют эти коммиты. Поскольку их SHA1 изменились, Git попытается воспроизвести их снова в этих репозиториях.

Если вы этого не сделали (снова нажали любой из этих коммитов), любая перебазировка должна быть безопасной.

Итак, проблема в следующем: вы уверены , что все локальные коммиты, которые вы перебираете, все еще на самом деле ... локальны?
И уверены ли вы в этом 'git pull --rebase' после 'git pull --rebase'?

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

В конце концов, все зависит от рабочего процесса слияния , который вы выбрали для создания .

5 голосов
/ 08 апреля 2010

Фиксация на ветке. От себя. Объединитесь с другой веткой (скажем, вы поддерживаете две базовые линии: ветку патчей и ветку новой разработки). Поймите, что другие коммиты были отправлены на серверную ветку, за которой вы следите. тянуть --rebase. Внезапно вы заново сделали каждый коммит против нового хэша и уничтожили коммит слияния.

3 голосов
/ 07 апреля 2010

Если от вас никто не оторвался, и вы нигде не выдвигали свои коммиты (до ребазинга), то с вами все в порядке. Однако Git хорошо справляется со слияниями, и вы можете обнаружить, что в целом будет меньше работы, если вы тянете и объединяете, а не тянете и перебазируете.

2 голосов
/ 07 апреля 2010

Помните, что Git - это распределенная система управления исходным кодом. Людям не нужно извлекать данные из центрального репозитория, к которому вы обращаетесь, - в определенных рабочих процессах они могут извлекать свои изменения непосредственно из вас. В этих случаях переписывание вашей истории, безусловно, может вызвать проблемы, о которых вы говорите

...