2014-01-14 6 views
1

Я использовал rebase, чтобы «объединить» ветвь dev в мастер, который отлично работает. Теперь мастер содержит все, что угодно от ветви dev, чего я хочу. Однако теперь мне нужно подтолкнуть его к github, который продолжает давать мне конфликты. Как я могу нажать/синхронизировать с github и перезаписать все файлы там?Git rebase в master и push без конфликтов

+0

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

+0

ли вы переделали ветку dev поверх мастера или наоборот: 'git rebase master' или' git rebase dev', который определит, как вам нужно обновлять ваш пульт. –

ответ

1

Если вы перебазировались master на вершине dev, да, master «содержит все от dev ветви», но его история была переписана (отсюда git push --force)

Правильная последовательность была бы:

  • первого воспроизведения dev на вершине master:

    git checkout dev 
    git rebase master 
    
  • Затем объединить dev к master (быстрой перемотки вперед слияние)

    git checkout master 
    git merge dev 
    

В этом случае master может быть выдвинут без «конфликтов» к его удаленной вверх по течению репо.

+0

В любом случае, это окончательный проект, и моя группа могла бы честно относиться меньше (такие же географии для TA);) – Ortix92

+0

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

0

То, что я бы, вероятно, сделать, чтобы убедиться, что у меня точно все на мастера, как другие люди видят его и принести в моих изменений от Dev филиала:

Во-первых, убедитесь, что у вас есть ссылка на ГОЛОВЫ вашей ветви dev прежде, чем любой хозяин будет пересоздать или слить. мастер

сбрасывается, как это прямо сейчас

git checkout master 
git reset --hard origin/master 

играют изменения на разработчике, как если бы они были сделаны в верхней части главной ветви

git checkout dev 
git rebase master 

объединить эти изменения в мастер (он будет быть быстрой перемотки вперед слияние)

git checkout master 
git merge dev 

отправить на эти изменения

git push origin master 

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

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