Удалить предварительно зафиксированные коммиты из предыдущей ветки git - PullRequest
0 голосов
/ 26 июня 2018

Работая над проектом, мы испортили синхронизацию при переключении между ветками. Сначала была одна функциональная ветвь foo, которая была перебазирована на master, однако локально master не синхронизировался, поэтому при перемещении в новую ветку bar все коммиты из предыдущего были добавлены в новую ветвь как Что ж. Git-дерево выглядит примерно так:

Master =>  A--B--C--D--E--Merge
               \-C--D--E-/-F--G--H   <= Bar
                  Foo

Моя цель - полностью удалить foo, поскольку он уже перебазирован в мастер и имеет что-то вроде:

Master =>  A--B--C--D--E
                        \-F--G--H    <=Bar

EDIT:

Так что, похоже, это более грязно, чем я учил. Кроме того, я не настолько разбираюсь в git и не могу сделать вывод, что именно произошло. Сейчас я расскажу как можно подробнее.

Товарищ по команде и я работаем над проектом. Для реализации одной функции мы создали отдельную ветку foo.

A -- B <-- (master)
      \
       C -- D -- E <-- (foo)

После завершения функции я изменил foo до master. И дерево теперь выглядело так:

A -- B -- C -- D -- E <-- (master)

Необходимо реализовать новую функцию, и, таким образом, открылась новая ветка bar.

A -- B -- C -- D -- E <-- (master)
                     \
                      F -- G -- H <-- (bar)

Это все с моей стороны. Теперь товарищ по команде выдвинул свой код, и я предполагаю, что он не синхронизировал некоторые ветви, и, кроме того, имелись некоторые конфликты, которые требовали слияния, но в итоге дерево git выглядит так:

A -- B -- C -- D -- E <-- (master)
      \             | \
       C -- D -------- M1 ------ M2 -- I <-- (bar)
                    \           /
                     F -- G -- H

Где:

  • M1 указано: объединить master в foo
  • M2 указано: объединить bar в foo
  • I это коммит нового партнера по команде

Кроме того, меня немного смущает сообщение в M2, так как тогда это означает, что у нас осталось foo в конце, но наше дерево имеет только bar.

Я попытался, как предложил @Mark Adelsberger, запустить git rebase master bar, но у меня сразу же возникли конфликты слияния при коммите C, и я прервал перебазирование. Согласно ответу, он должен автоматически решить, что оба эти C s - то же самое принятие, и пропустить их, но это не имело место.

Моя цель состоит в том, чтобы сгладить дерево, если это возможно, то есть избавиться от C и D в bar ветви и, возможно, объединить или поместить F, G и H в одно и то же строка как M1, M2 и I.

Возвращаясь к вопросу, я вижу, что в моем первом посте не хватало деталей. Надеюсь, эта редакция прояснит проблему, с которой я сталкиваюсь.

1 Ответ

0 голосов
/ 28 июня 2018

Итак, хотя ответ @Mark Adelsberger не совсем помог, он показал мне направление, в которое нужно смотреть.

Выполнение простого git rebase master bar этого не сделало, поскольку я сразу же столкнулся с конфликтами при коммите C. Этого не должно было случиться, так как фиксация является дубликатом и должна была быть пропущена.

Однако выполнение git rebase -i master bar помогло, потому что я мог вручную исключить коммиты C и D. Кроме того, он также избавился от M1 и M2, сделав красивый и чистый журнал.

...