Интерактивный ребаз без изменения точки ветвления? - PullRequest
0 голосов
/ 28 марта 2012

Я хочу сделать что-то похожее на то, что делает стандартный интерактивный ребаз, но я хочу использовать его просто для очистки истории моей ветви и , а не извлечения любых обновлений из другой ветви. Итак, я хочу сохранить «точку ветвления» такой же. Например, если моя ветвь B1:

--O--O--O--O--O--O------O--O----O--O   master
      \
       O---O--x--x--x--O--O--x--x--O   B1

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

--O--O--O--O--O--O------O--O----O--O                        master
                                    \
                                     O---O--X--O--O--X--O   B1

Где X - грязные коммиты, сжатые вместе с очищенным сообщением коммита. Но как я могу получить ниже?

--O--O--O--O--O--O------O--O----O--O   master
      \
       O---O--X--O--O--X--O            B1

Ответы [ 2 ]

3 голосов
/ 28 марта 2012

Вы можете сделать ребаз на любом коммите, а не только на master HEAD.Допустим, ваша точка ветвления B1 равна 12345, тогда вы можете интерактивно перебазировать B1 в этом коммите с помощью

# make sure you are on B1
$ git checkout B1

$ git rebase -i 12345

Затем очистить историю.для большего количества указателей.

0 голосов
/ 28 марта 2012

Документация 'git rebase' относится именно к вашему случаю:

Диапазон коммитов также может быть удален с помощью rebase. Если у нас есть следующая ситуация:

           E---F---G---H---I---J  topicA

   then the command

       git rebase --onto topicA~5 topicA~3 topicA

   would result in the removal of commits F and G:

           E---H'---I'---J'  topicA

   This is useful if F and G were flawed in some way, or should not be
   part of topicA. Note that the argument to --onto and the <upstream>
   parameter can be any valid commit-ish.
...