Почему перестановка после набора вишни не применяется одновременно к одной и той же фиксации?
Когда вы черри выбираете фиксацию из одной ветки (например, "тема" ) на другую (назовем ее "хозяином" ), история этого фиксации переписывается, изменяется хеш-код, и она становится новой независимой фиксацией.
Однако, когда вы впоследствии переустанавливаете тему против master git, достаточно умны, чтобы знать, что не применять к фиксации дважды.
Пример:
A --- B <- master
\
\---- C ---- D <- topic
$ git checkout master
$ git cherrypick D
A --- B --- D' <- master
\
\---- C ---- D <- topic
$ git checkout topic
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying 'C'
A --- B --- D' <- master
\
\---- C' <- topic
Как работает эта магия? То есть. как git знает, что он должен применять C к D ', но не D к D'?
Ответы
Ответ 1
Ответ на странице man для git-rebase:
Обратите внимание, что любые фиксации в HEAD, которые вводят те же текстовые изменения, что и фиксация в HEAD.., опущены (то есть патч, уже принятый выше по течению с другим сообщением фиксации или временной меткой, будет пропущен).
Rebase просматривает текстовое изменение и отказывается воспроизвести его, если он уже существует на ветке, на которую вы переделываете.