Гілки та хірургія

Редагування будь-якого коміту

Одруківка — в коміті тритижневої давнини. Звичні ліки — інтерактивний ребейз: зупинитися на коміті, виправити, продовжити, молитися. Ліки Gitcito: правий клік по коміту, Редагувати цей коміт, змінили текст, готово. Кнопка з пером на панелі деталей коміта відкриває той самий редактор.

Редагування історичного коміту

Що воно робить

Виберіть будь-який коміт, що є предком HEAD — з лінійною історією чи без. Діалог показує його файли та повідомлення; редагуйте будь-що з двох. Далі відбуваються дві речі:

  1. Попередній перегляд каскаду відтворює заново кожен коміт вище редагованого в пам’яті (ланцюжок cherry-pick через merge-tree — без чекауту, без робочого дерева, без посилань). Кожен нащадок підсвічується зеленим або червоним, тож ви ще до того, як щось зрушить, знаєте, чи правка проходить чисто, чи зіштовхується з пізнішою зміною.
  2. Переписати історію робить це по-справжньому: той самий ланцюжок будується plumbing-командами, потім гілка переїжджає через reset --keep — ваші незакомічені зміни переносяться, або reset переривається і нічого не сталося. Спершу робиться знімок-вартовий, а скасування повертає старий ланцюжок.

Авторство й дати кожного відтвореного коміту зберігаються; змінюються лише хеші — саме це й означає переписування історії.

Злиття в діапазоні

Редагування коміта під двома злиттями — каскад їх відтворює

Злиття між комітом і HEAD більше не вимикає редагування. Каскад відтворює злиття, накладаючи його записаний результат — дерево, яке злиття справді закомітило, разом із розв’язаннями конфліктів — на переписаного батька, тож розв’язання, зроблені кимось вручну, переживають переписування дослівно. Без rerere, без повторного злиття, без робочого дерева: той самий plumbing у пам’яті, що й у решті каскаду, і обидва вказівники на батьків зберігаються. Бічна гілка, яка теж містить редагований коміт, переписується й перенацілюється; та, що його не містить, зберігає свою ідентичність недоторканою. Банер у діалозі каже, скільки злиттів несе діапазон, а кроки-злиття показують у попередньому перегляді іконку злиття.

Чесне застереження: відтворене злиття рівно настільки добре, наскільки добрий його записаний результат. Якщо ваша правка зіштовхується з рядками, які розв’язало саме злиття, попередній перегляд червоніє точно так само, як будь-який інший конфліктний крок — ніщо не вгадується.

Коли каскад конфліктує

Пізніший коміт торкнувся тих самих рядків, які ви редагуєте. Попередній перегляд позначає цей коміт червоним разом із конфліктними файлами, і переписування відмовляється запускатися — ніщо ніколи не застосовується наполовину. Або редагуйте інакше, або беріть конфлікт лобом через інтерактивний ребейз.

Обмеження

  • Коміт має бути предком HEAD. Коміт на невлитій бічній гілці не має шляху до вашої поточної гілки, яким його можна відтворити.
  • Бінарні файли та файли понад 2 МБ показуються, але не редагуються.
  • Коміт, що вже є на віддаленому репозиторії, редагувати можна, але наступний пуш доведеться робити як force push — діалог попереджає, перш ніж ви на це погодитеся.
  • Файли, видалені в коміті, редагувати не можна (немає вмісту для редагування).

Див. також: Інтерактивний ребейз · Відновлення та рефлог · Поглинання

Покращити цей переклад на GitHub