Запитати

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

Alex
3 роки тому · 732 · Вирішено

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

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

git commit

Відповіді на питання (1)
Alex Обране рішення

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

  1. Зробіть резервну копію. Це зовсім не обов'язково, але допоможе зберегти нервові клітини, якщо щось піде не так. варіанти:
  • Копія каталогу з файлами в якому розгорнуто git репозиторій.
  • git branch backup або git tag backup в останньому коміті.
  • Прочитати довідку по командам reflog і reset і перевірити, що бекапи вже є.
  1. Позбавтеся від незакомічених змін ( git add + git commit або git stash або щось ще).
  2. Виконайте 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

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

  1. В "діалозі" з вам потрібно замінити 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.

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

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

Вхід / Реєстрація

Читайте також: termux на пк, giy, linux на андроид