Как заменить мастер ветку экспериментальной веткой - PullRequest
5 голосов
/ 09 ноября 2010

У меня есть две ветви: мастер и эксперимент. Оба они развивались отдельно и сейчас сильно отличаются друг от друга. Теперь я готов провести экспериментальную ветку в моей мастерской ветке.

Если я попытаюсь

git checkout master
git merge experiment

Я получаю тонны и тонны ошибок.

Какой самый простой способ заставить ветку эксперимента стать мастером, не теряя всей истории ветки эксперимента.

Я уже создал резервную копию главной ветви как выпуск 1.0, как это

git checkout master
git checkout -b release_1

Ответы [ 3 ]

21 голосов
/ 09 ноября 2010

Предполагая, что это частные ветви (т.е. над ними никто не работает), вы можете просто установить master в experiment следующим образом:

git checkout master
git reset --hard experiment

Если этопубличные ветки, вы, вероятно, захотите объединить и разрешить конфликты, как Джефроми объясняет .

12 голосов
/ 09 ноября 2010

Здесь есть несколько возможностей, в зависимости от того, что именно вы подразумеваете под «заменить».Вы почти наверняка выбрали правильный подход, чтобы начать с слияния.«Ошибки», которые вы видели, были, вероятно, конфликтами слияния.Если вы точно знаете, что всякий раз, когда возникает конфликт, вы хотите использовать версию из вашей экспериментальной ветви, вы можете сделать:

# resolve conflicts by taking the version from experimental
# non-conflicting content is merged normally
git checkout master
git merge -Xtheirs experimental

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

# do the merge the other way around
git checkout experimental
git merge -s ours master
git checkout master
git merge experimental

# do the merge the right way
git checkout master
git merge --no-commit experimental  # merge, but stop before committing
git checkout experimental .         # check out content, but don't switch branch
git commit                          # commit the merge

Способы, предложенные другими (reset --hard, branch -M), будут работать, вроде как, но, поскольку они не создают коммит слияния, ваша основная ветвь перемещается в-переход вперед, потенциально может вызвать головную боль для тех, кто должен вытащить из этого репо.Как правило, я бы сказал, что это правильный ответ, только если эти ветки не опубликованы.

2 голосов
/ 09 ноября 2010

Вы можете переименовать свою ветку (из эксперимента): git branch -M master

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...