У мене 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-commit
man 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". Виправлення призначено для внесення змін до деяких старих комісій.