У мене 2 коміти, А потім Б, готові до поштовху. Я розумію, що забув щось додати в А.
Як я можу додати цю зміну до A за допомогою Magit? Я навіть не знаю, на яку частину документації Git я повинен дивитися.
У мене 2 коміти, А потім Б, готові до поштовху. Я розумію, що забув щось додати в А.
Як я можу додати цю зміну до A за допомогою Magit? Я навіть не знаю, на яку частину документації Git я повинен дивитися.
Відповіді:
Давайте на мить зробимо вигляд, що ви хочете додати щось у HEADфіксацію, тобто "другий фіксатор B" у вашому прикладі.
Спливаюче вікно набору даних cмає обов'язкове " aЗмінити". Якщо натиснути цю клавішу, ви "зміните" поетапні зміни в HEADкоміті. Оскільки комісії не змінюються в Git, це фактично замінить стару команду новою. Буфер зі старим повідомленням фіксації з’явиться, так що ви можете змінити його, якщо додана зміна також вимагає, щоб ви відкоригували повідомлення. Як завжди, натисніть, C-c C-cколи ви закінчите редагування повідомлення. Це еквівалентно запуску git commit --amendв командному рядку.
HEADта відредагувати повідомлення про фіксаціюОскільки часто трапляється, що вам потрібно лише скорегувати зміни або повідомлення, Magit надає два додаткові варіанти:
HEADредагування повідомлення про фіксаціюHEADбез додавання до нього поетапних змінЯкщо ви хочете відредагувати документ, який не є HEAD, то вищезгадане не вийде. Ці команди завжди "змінюють" (тобто замінюють) HEADфіксацію. Git не надає жодної команди для зміни іншого комітету, окрім HEADцього, це дещо більше.
Magit дійсно надає таку команду, але оскільки є ситуації, коли бажано робити це у кілька етапів, ми обговоримо це спочатку.
Змінення комітету, відмінного від, HEADможна розділити на три етапи:
A) HEAD.HEAD(як описано вище), що призведе до фіксації A'.A, але згодом A'.Це можна зробити за допомогою інтерактивної бази даних. Введіть, rщоб відобразити спливаючу базу даних. Потім введіть mдля виклику варіанту редагування "редагування комісії". З'являється буфер із останніми комісіями. Перейдіть до зобов'язання, яке ви хочете змінити, і введіть, C-c C-cщоб вибрати його Потім Git перемотає історію до цього фіксу та показує інформацію про поточну ребазу в буфері стану.
Змініть, HEADяк описано вище. Потім скажіть Git, що ви все зробили, набравши текст r r. Якщо A'і Bконфлікт, то перезавантаження зупиниться на Bі вам доведеться вирішити конфлікт. Після цього натисніть, r rщоб продовжити.
Якщо ви знаєте, що ваші зміни в Aрезультаті призведуть до конфлікту B, виконайте такі дії, як описано вище, інакше використовуйте наступний підхід.
Git дозволяє створювати "виправлення фіксує" за допомогою git commit --fixup A. Це створює новий комітет, який записує зміни, які "мали бути внесені в інший комітет". Ця фіксація стає новою HEAD. Існує також --squashваріант. Інформацію про відмінності див. На git-commitсторінці чоловіка.
Щоб насправді поєднати команду Aта нову комісію, A'а потім знову застосувати Bповерх того, вам доведеться використовувати ребазу. Magit забезпечує зручну команду для цього r f.
Основна відмінність вищезазначеного підходу полягає в тому, що тут ми спочатку створюємо нову команду, а потім перезаписуємо, щоб поєднати це з "ціллю" та повторно застосувати B. Вище ми почали з звільнення, а не з зобов'язань.
У програмі Magit як --fixupі --squashваріанти, так і варіанти доступні з спливаючих вікон фіксування, на fта s. Але Magit також пропонує "миттєві" варіанти команд для фіксації та сквош на Fі S. Ці варіанти створюють нову команду на зразок "невідкладених" варіантів, але потім вони миттєво поєднують фіксацію фіксації з цільовим комітетом за допомогою ребазування, не потребуючи виклику іншої команди.
"Миттєве виправлення" ( c F) - це по суті те саме, що і "розширити HEAD" ( c e), за винятком того, що він працює для будь-якої фіксації, а не лише HEAD.
Подальше читання:
git-commit(1)git-rebase(1)git-commitman page переспрямовує, до git-rebase(1)яких є ці рядки: Запропоноване повідомлення фіксації для складеного комітету - це з'єднання повідомлень про виконання першого коміту та тих, хто має команду "сквош", але опускає повідомлення про фіксацію комітетів за допомогою "fixup" командування. IOW, використовуйте fixup, якщо ви просто хочете виправити код у попередньому фіксації, використовуйте сквош, якщо ви також хочете виправити повідомлення про фіксацію.
git commit --amend –C HEAD- це команда Git, яку ви хочете шукати, і ви можете вносити зміни в Magit за допомогою C-c C-a.
C-c C-aце зі старої версії (я думаю). Крім того, я не бачу жодного сліду "внесення змін" у довідковий буфер ( ?).
Отже, один робочий процес:
Потім
Авторозмикання автоматично перемістить усі! Fixup фіксації в потрібне місце і встановить їх, щоб вони повернулися на повторну базу.
iдає мене Cannot rebase: Your index contains uncommitted changes. Please commit or stash them.. За винятком того, що я не маю жодних неспроможних змін. : /
Proceed despite merge in rebase range? [c]ontinue, [s]elect other, [a]bort. Чи намагаєтесь я сказати мені, що моє виправлення може з'явитися під час майбутнього злиття?
merge in rebaseдивіться КУПИ під git help rebase. Я пропоную зробити виправлення, перш ніж тягнути за течією.
Для внесення змін до останнього комітету це "c a". Виправлення призначено для внесення змін до деяких старих комісій.