2017-01-02 13 views
4

Я стараюсь иметь хороший рабочий процесс Git, чтобы внести свой вклад в проект с открытым исходным кодом (Endless Sky), но, узнав, что я начал, я не закончил с чистой историей. Мой рабочий процесс сейчас:Переключение рабочего процесса Git из слияния в rebase: как очистить историю слияния?

  1. upstream/master является here.
  2. My fork is here. Я начал использовать GitHub Desktop, но начинаю переключиться на командную строку.
  3. Предполагается, что мой мастер-вилка будет зеркально отображать upstream/master. Каждая работа, которую я разрабатываю, имеет ветвь к себе, созданную от моего мастера, и я использую свои собственные (местные) alpha и (push) beta ветви для объединения моих функций для тестирования/воспроизведения.

Моя проблема на моем раздвоенном хозяине: This branch is 15 commits ahead of endless-sky:master. Файлы не изменены; это сообщения об объединении слиянием. Это показалось мне уродливым, поэтому я прочитал кое-что, особенно статью Stop using 'git pull': A better workflow, и я переключился на перезагрузку/ускоренную пересылку.

Но каков наилучший способ очистки существующей истории слияния в этой ситуации? Он касается и некоторых моих ветвей функций (см .: feature/JammingHaywire), и я не хочу подавать PR, где значимые фиксации утонуются бессмысленными коммитами.

Я читал различные другие вопросы, и я не совсем понятно ли я лучше:

  1. удаление/переделку master - это то, что безопасно, особенно с GitHub?
  2. пытается сделать git rebase -i [which commit?] обратно в какой-то момент - кажется, не работает. Попробовал это до 0facf00, некоторые фиксировали long перед тем, как я разветвил, и мои хэши фиксации слияния (например, 3be4d97, увиденные на GitHub) не отображаются в текстовом файле, который нужно удалить. Конечный результат не изменился.
  3. делать что-то еще, о котором я еще не думал? Является ли это тем, что я пытаюсь сделать «хорошей практикой» в первую очередь?
+1

Я [отредактировал] (// stackoverflow.com/help/editing) ваше сообщение, чтобы добавить ссылку на указанную вами статью. Если это неверно, не стесняйтесь обновлять или удалять его. –

+1

Отлично, спасибо. В то время я не мог добавить третью ссылку (начиная пользовательский лимит), так что это отличная помощь. – Elyssaen

ответ

1

Ваш первый вариант, удаление и воссоздание master, возможно, самый простой.Вот как вы можете очистить вещи:

  1. Если вы уже не имеете, переключатель master:

    git checkout master 
    
  2. Создать резервную ветвь, только в случае, если:

    git branch backup 
    
  3. Сброс master соответствует upstream. Это фактически то же самое, как удаление и воссоздание ветви, ваш вариант 1, но требует только одну команду:

    git reset --hard upstream/master 
    
  4. Force-толчок:

    git push --force-with-lease origin master 
    

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

Ваш master филиал теперь в курсе upstream/master, поэтому на GitHub вы должны увидеть:

This branch is even with endless-sky:master. 

Если вы нашли позже, что вы ничего не хватает, вы можете просматривать историю backup, чтобы найти его.

Чтобы исправить любые художественные ветви, которые были так же подогнаны, делают:

git checkout myfeature 
git rebase -i master 

Ваш редактор будет открыт, и вы увидите список фиксаций. Удалите все строки, содержащие дополнительные слияния, затем сохраните и выйдите. Снова нажмите --force-with-lease.

2

Моя проблема на моем раздвоенным мастере: «Эта ветвь 15 совершает впереди бесконечного-неба: мастер.» Файлы не изменены; это сообщения об объединении слиянием.

Давайте начнем там:

сбросить вилки мастер бесконечному-небо/мастер

Предполагая, что вы клонировали вилку:

cd /path/to/fork/clone 
git checkout master 
git remote add-url endless-sky /url/of/endless-sky 
git fetch endless-sky 
git reset --hard endless-sky/master 
git push --force 

Теперь проверка любого вашего художественного отделения (что вы намерены сделать PR от), и переустановите его на своей основной ветке (которая также представляет собой)

git checkout my_feature_branch 
git rebase master 
git push --force