2013-03-04 4 views
1

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

Проблема с этим подходом заключается в том, что git объединяет вложенные файлы с моими существующими изменениями и в будущем, когда я пытаюсь выяснить, что я сделал на этом конкретном коммите, не будет четкого различия между тем, что я сделал и что тянуть слилось.

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

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

Любые другие предложения о том, как иметь чистую историю?

ответ

3

Перед нажатием на удаленном хранилище (ваши локальные коммиты), вы должны сделать

git fetch origin 

, чтобы извлечь все изменения, внесенные в хранилище (происхождение просто пример название). Затем сделать

git rebase origin/remote-branch 

, чтобы перебазировать свой местный филиал в верхней части происхождения/дистанционного отделения одного.

Если файл был изменен как локально, так и в репозитории, вам придется исправить проблемы слияния здесь. Если rebase заканчивается гладко, вы готовы выдвинуть:

git push origin local-branch 

Это будет держать чистую прямую GIT ветвь.

+1

'git pull' обычно является' git fetch' + 'git merge', но может быть настроен на' git fetch' + 'git pull' с изменением конфигурации - подробнее здесь: http://randyfay.com/содержание/проще-перебазирование избегающего-непреднамеренный-слияния-фиксаций –

Смежные вопросы