Git заменяет промежуточные коммиты на другие ветки

Хотелось переместить вещи:

A--B--C--D--E--F--G--H   (master)
      \
       \
        L--M--N--O--P    (feature)

Хотел удалить коммиты DEF и заменить на LMNOP. Финальный репо должен быть

A--B--C--L--M--N--O--P--G--H  (master)

К сожалению, мой Git еще не достаточно силен, любая помощь?

2 ответа

Это должно сделать это: git rebase F master --onto feature

Это говорит Git перемещать коммиты между F..master на feature, Теперь ваш репо выглядит

A--B--C--D--E--F
       \
        \
         L--M--N--O--P          (feature)
                      \
                       \
                        G--H    (master)

Тогда просто git branch -d feature очистить старое feature ветвь, и сборщик мусора Git позаботится о D--E--F,

Для получения более подробной информации и примеров диаграмм, прочитайте документацию по rebase.

Ваша история выглядит так:

$ git log --oneline  --graph --all
* 3e680f3 H
* afd87a5 G
* 2583117 F
* 6f44661 E
* 37ba1cd D
| * 7c8d70f P
| * b953a6f O
| * 7e2f28e N
| * 95fc381 M
| * 7ca7fe9 L
|/
* c30b405 C
* 70fad86 B
* 18aedd7 A
* c32e786 Initial commit

Объединить feature ветка

$ git me feature
Merge made by the 'recursive' strategy.
 l | 0
 m | 0
 n | 0
 o | 0
 p | 0
 5 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 l
 create mode 100644 m
 create mode 100644 n
 create mode 100644 o
 create mode 100644 p

Интерактивно сделай ребаз своего хозяина, для меня c32e786 хеш начального коммита:

$ git rebase -i  c32e786

Вы увидите текстовый редактор со списком коммитов в нем. Удалите ненужные коммиты и измените порядок остальных или их, как вы хотите:

$ git log --oneline
ff6a364 H
4a9d73c G
7c8d70f P
b953a6f O
7e2f28e N
95fc381 M
7ca7fe9 L
c30b405 C
70fad86 B
18aedd7 A
c32e786 Initial commit
Другие вопросы по тегам