Моя история Git выглядит так:
Я хотел бы превратить фиолетовые коммиты в один. Я не хочу больше видеть их в моем журнале коммитов.
Я пытался сделать git rebase -i 1
, но даже несмотря 1
на то, что он находится на синей ветке (см. Рисунок), я все еще вижу каждую фиксацию в моей фиолетовой ветке.
Как я могу полностью удалить фиолетовую ветку (из журнала фиксации)?
git
git-merge
git-rebase
Бенджамин Туег
источник
источник
Ответы:
Как
git rebase -i <sha before the branches diverged>
это позволит удалить слияние фиксации и журнал будет ни одной строки , как вы хотели. Вы также можете удалить любые коммиты, которые вам больше не нужны. Причина, по которой ваша перебазировка не работала, заключалась в том, что вы не возвращались достаточно далеко.ВНИМАНИЕ: вы переписываете историю, делая это. Выполнение этого с изменениями, которые были отправлены в удаленное репо, вызовет проблемы. Я рекомендую делать это только с локальными коммитами.
источник
git rebase
и они будут удалены.Начиная с репо в исходном состоянии
Чтобы удалить фиксацию слияния и сжать ветку в одну фиксацию в основной ветке
Используйте эти команды (заменив 5 и 1 на SHA соответствующих коммитов):
Чтобы сохранить фиксацию слияния, но сжать ветвь, выполните следующие действия:
Используйте эти команды (заменив 5, 1 и C на SHA соответствующих коммитов):
Чтобы удалить коммит слияния и заменить его отдельными коммитами из ветки
Просто сделайте (заменив 5 на SHA соответствующего коммита):
И наконец, чтобы полностью удалить ветку
Используйте эту команду (заменив C и D на SHA соответствующих коммитов):
источник
git rebase 5 master
случае, почему это не порядок "ABC 1 2 3 4 5 D ..."?master
не имеют ничего общего с5
ними, и накладывает их поверх5
. Коммит вC
не является частью линии5
, он первым перемещается поверх5
.git rebase C 5; git rebase 5 master
Чтобы просто удалить фиксацию слияния
Если все, что вы хотите сделать, это удалить фиксацию слияния (2), чтобы этого не произошло, команда будет выглядеть следующим образом
git rebase --onto <sha of 1> <sha of 2> <blue branch>
И теперь фиолетовой ветки нет в журнале фиксации синего цвета, и у вас снова есть две отдельные ветки. Затем вы можете раздавить фиолетовый цвет независимо и выполнять любые другие манипуляции, которые вам нужны, без фиксации слияния.
источник
Есть два способа решить эту проблему в зависимости от того, что вы хотите:
Решение 1. Удалите фиолетовые коммиты, сохраняя историю (на случай, если вы хотите откатиться)
-m 1
указывает, какую родительскую строку выбратьФиолетовые коммиты останутся в истории, но, поскольку вы вернулись, вы не увидите код этих коммитов.
Решение 2. Полностью удалите фиолетовые коммиты (нарушение работы при совместном использовании репо)
и удалите (удалите строки), соответствующие фиолетовым коммитам.
Это было бы менее сложно, если бы после слияния не производились коммиты. Дополнительные коммиты увеличивают вероятность конфликтов во время
revert/rebase
.источник
1 - 1 = 0
. Но если вы затем удалите фиолетовые коммиты, вы оставите возвращенный патч, если вы не удалите и его. Если вы этого не сделаете, это как применить-1
к своей истории, а не0
, так что вы оставите изменения, которые вам не нужны.