Вирішено Як об'єднати кілька комітів в один

Alex Alex · 93 · 1

Є гілка, в якій послідовно лежить 13 комітів. Є нормальний спосіб їх об'єднати?

А по суті, я можу перейти в основну гілку і перекинути в неї тільки останній з допомогу cherry-pick, тому що він містить в собі актуальну версію, що і потрібно в результаті. Хоча можу помилятися

Відповіді на питання

Нехай ви хочете склеїти останні три коміти (для 13-ти комітів процес виглядає аналогічно). Для цього є відмінний метод з використанням git rebase. Ця команда дозволяє змінювати історію комітів. Алгоритм роботи виглядає наступним чином:

  1. Зробіть резервну копію. Це зовсім не обов'язково, але допоможе зберегти нервові клітини, якщо щось піде не так. варіанти:

    • Копія каталогу з файлами в якому розгорнуто git репозиторій.
    • git branch backup або git tag backup в останньому коміті.
    • Прочитати довідку по командам reflog і reset і перевірити, що бекапи вже є.
  2. Позбавтеся від незакомічених змін ( git add + git commit або git stash або щось ще).

  3. Виконайте git rebase -i HEAD~3. У відповідь на це ви отримаєте "діалог" (вікно редагування файлу) виду:

    pick bcdca61 Second commit
    pick 4643a5f The third commit with cool stuff
    pick e0ca8b9 The last commit
    
    #  Rebase 48411de..e0ca8b9 onto 48411de
    #
    #  Commands:
    #  p, pick = use commit
    #  r, reword = use commit, but edit the commit message
    #  e, edit = use commit, but stop for amending
    #  s, squash = use commit, but meld into previous commit
    #  f, fixup = like "squash", but discard this commit's log message
    #  x, exec = run command (the rest of the line) using shell

    при цьому, коміти вказані в порядку зростання часу створення (найнижчий - найсвіжіший).

  4. В "діалозі" з вам потрібно замінити pick на squash для двох найсвіжіших комітів (два нижні рядки). В наведеному вище прикладі, це повинно виглядати ось так:

    pick bcdca61 Second commit
    squash 4643a5f The third commit with cool stuff
    squash e0ca8b9 The last commit
    
    #  Rebase 48411de..e0ca8b9 onto 48411de
    #
    #...

    Після цього ви повинні закрити цей "діалог" (зберегти редагований файл). Якщо для роботи з git використовується vi (за замовчуванням), то це робиться послідовним натисканням ESC, введенням :wq і натисненням Enter.

  5. У наступному "діалозі" вам запропонують вказати заголовок для отриманого коміту.


Для відповіді на запитання необхідно авторизуватись

Війти / Зареєструватися

Схожі питання