Git дает мне слишком много опций - PullRequest
1 голос
/ 13 января 2012

Когда я ввожу:

git rebase -i HEAD~3

Вместо трех последних коммитов я вижу последние 10.

По какой-то причине, где N - это число, которое я передаю, если 2 <= N <= 10, я вижу 10 вариантов. если N = 1, я просто вижу последний коммит. </p>

Это напрашивается на 2 вопроса: 1. Кто-нибудь знает, почему это происходит? 2. Кто-нибудь знает, как я могу получить N, чтобы быть 3? Есть много конфликтов, которые возникают в дальнейших коммитах, и я не хочу работать против них.

Для небольшого контекста: У меня есть git "feature branch", который является просто патчем, позволяющим некоторому устаревшему коду работать локально на Mac. он решает несколько вопросов о древней установке Drupal, которая все еще находится в производстве я исправлял это, чтобы развиваться против локально, а затем перебирал его для коммитов, чтобы он мог тестироваться в промежуточной среде. все работало нормально ... до сих пор.

1 Ответ

3 голосов
/ 14 января 2012

Ключом к тому, что вы видите, является реальное поведение rebase вместе со спецификатором ревизии ~. Я получил эту древовидную структуру и информацию о том, как ~ работает от http://schacon.github.com/git/git-rev-parse.html#_specifying_revisions.

Следующий график истории - иллюстрация Джона Лелигера. Оба узла фиксации B и C являются родителями узла фиксации A. Родительские коммиты упорядочены left-to-right .:

G   H   I   J
 \ /     \ /
  D   E   F
   \  |  / \
    \ | /   |
     \|/    |
      B     C
       \   /
        \ /
         A

Как показывает указанная мной страница, ~ относится к N-му прародителю, где прародитель будет первым родителем любого слияния. Если бы вы были на ветке, где HEAD -> A и указали HEAD~3 в качестве вашей ревизии, это указывало бы на G.

Так что rebase -i HEAD~3 сказал бы, что вы хотите в интерактивном режиме перебазировать все коммиты с G до A поверх G. Это означает, что вы увидите ВСЕ другие коммиты как часть процесса ребазирования, поэтому вместо просто D, B и A вы увидите A-F и H-J в списке ребаз. Это будет 8 различных коммитов по сравнению с 3.

...