как переупорядочить коммиты в Git неинтерактивно - PullRequest
32 голосов
/ 13 февраля 2011

Какими неинтерактивными командами git достигается переход с «До» на «После»?

До:

A---B---C---D

После того, как:

A---C'---B'---D'

Ответы [ 3 ]

38 голосов
/ 13 февраля 2011

В вашем случае вы можете перебазировать интерактив: git rebase -i HEAD~4 Затем вы можете просто изменить порядок ваших пиков

Например, давайте добавим еще три файла в нашу ветку:

git add A
git commit -m "A"

git add B
git commit -m "B"

git add C
git commit -m "C"

Ваш шортлогбудет:

$ git shortlog
 (3):
      A
      B
      C

Если вы хотите изменить порядок B с C:

$ git rebase -i HEAD~2
pick 1f9133d B
pick 33f41be C

Вы просто измените их порядок на:

pick 33f41be C
pick 1f9133d B

После того, как выВы закончили писать, смотрите короткий список:

$ git shortlog
 (3):
      A
      C
      B

Вы можете сделать то же самое со всеми коммитами, переупорядочив.Это как то, что вы видите, это то, что вы получаете, что довольно круто :)

23 голосов
/ 13 февраля 2011

Попробуйте:

git reset --hard A
git cherry-pick C
git cherry-pick B
git cherry-pick D

Возможно, есть способ с git rebase, но я не совсем понял.

5 голосов
/ 12 сентября 2012

См. Как запустить git rebase --interactive в неинтерактивном режиме? для использования git rebase --interactive в неинтерактивном режиме.

Затем, если у вас есть формальные критерии для переупорядочения коммитов, вы можете написать скрипт, например, Действительно сгладить git merge , чтобы переупорядочить коммиты к исходной дате фиксации.

...