новый код сохранен в ветке git, как слить его обратно в транк - PullRequest
0 голосов
/ 13 декабря 2011

Последовательность:

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

Теперь я хочу вернуть весь бизнес обратно в багажник. Думаю, слияние не сделает этого. Что будет?

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Предполагая, что здесь нет сумасшествия git-svn (я не уверен, что использование вами слова "trunk" означает, что вы пришли из svn и сохранили терминологию, или фактически взаимодействуете с ней) ...

Самый чистый способ сделать это, предполагая, что шаг сортировки «удалить код на транке» был выполнен в изолированном коммите, состоит в том, чтобы отменить этот коммит, а затем объединить:

git checkout master
git revert <triage-commit>     # could do this for multiple commits if needed
git merge bugfix-branch

Если это не так чисто, объединениеспособ идти;вам просто нужно разобраться с некоторыми вещами.Возможно, вы захотите сделать это в тестовой ветке на всякий случай:

# start back from master
git checkout -b master-merge master
# merge your fixes
git merge bugfix-branch

На этом этапе вам придется столкнуться с множеством «удаленных нами» конфликтов (вот как они сообщают git status).Это указывает на то, что они были удалены в «нашей» ветви (основной), но изменены в ветви, которая должна быть объединена.Это оставит версии из ветви, которая будет объединена, в дереве.Вы можете git add пометить их как разрешенные.Если у вас есть конфликты, которые не являются этой формы, вам придется работать с ними как обычно.Как только вы все исправите, проверьте результаты, протестируйте и git commit, чтобы завершить объединение.

Если вы уверены, что все конфликты возникнут в результате этого сценария сортировки / исправления ошибок, вы можетеиспользовал git merge -X theirs, чтобы сообщить Git о разрешении всех конфликтов, сохранив «свою» версию (ту, что была в ветке исправлений).Делайте это, только если вы уверены!

git-svn note: Я слышал, что git-svn имеет проблемы со слияниями.Я никогда не использовал его, я понятия не имею, как это работает, но если это так, что вы не должны иметь слияния во всем, что вы намереваетесь отправить обратно в репозиторий SVN ... тогда вместо слияния выше, выможет перебазировать git rebase master bugfix-branch.Вы столкнетесь с точно такими же конфликтами слияния.После того, как вы справитесь с ними, вы можете быстро перенести мастер до недавно пересаженной ветви с помощью git checkout master; git merge bugfix-branch.

0 голосов
/ 13 декабря 2011

В git вы можете просто использовать rebase, если вы еще не отправили изменения. (И обычно вы выполняете ветвление перед выполнением коммита, чтобы сначала проверить его перед выполнением комиссии: 1. сделать ветвь, 2. зафиксировать, 3. проверить, 4. нажать, 5. позволить другим протестировать, 6. объединиться с мастером, если это выглядит нормально все.)

...