Як додати файл до попереднього коміту?


85

Приблизно за останню годину я змінив файли

A
ATest
B
BTest

Для того, щоб переконатись, що мої повідомлення про коміти відповідають фактичним змінам, здійсненим Aз описом. На жаль, я не взяв участь ATestу цьому коміті.

Тим часом, досі не вчинені є Bі BTest.

Який найкращий спосіб діяти в цей момент? Я хотів би:

  1. Повернути попереднє комітування, не впливаючи на мої незаблоковані на даний момент файли?
  2. Додати інший файл під тим самим описом до попереднього коміту?

Я думаю, що 2 має бути звичайним способом. У чому проблема в цьому?
Адріан Шум,

Відповіді:


141

Щоб додати новий файл до попереднього коміту:

$ git add new-file
$ git commit --amend

Ви можете використовувати, git commit --amend --no-editякщо не хочете змінювати повідомлення про коміт.


3
Дякую. З цікавості, якби sha1 коміту був відомий і коміт не був "останнім", як би можна було внести зміни до цього коміту?
Джеймс Райцев,

6
@Jam, я б сказав, дуже старайся, щоб цього не робити ;-) Але якщо потрібно, одним із способів (не впевнений, що це найкращий) є закріплення нового файлу як власного коміту, а потім використання git rebase -iдля упорядкування комітів та об'єднання. коміт нового файлу з іншим комітом. Це може бути матеріалом для окремого запитання.
David Z

3
Роблячи так, git rebase -iяк пропонує @DavidZ, все, що вам потрібно зробити, - це перенести новий коміт трохи нижче того, з яким ви хочете його поєднати, і замінити слово нового коміту на squashзамістьpick
MM

Що робити, якщо я склав багато файлів, але я хочу додати лише один до зміненого коміту?
dfrankow

Зніміть всі інсценізовані файли (наприклад, git reset), потім перейдіть до того, який ви хочете додати, внесіть зміни у коміт, а потім знову сформуйте всі файли.
Вільям Перселл,

54

Ось кумедна блок-схема 1, яка також напрочуд зручна: вона дає правильну рекомендацію як для початкового питання, так і для зміненого "Що, якби це не було останнє комітування?" питання.

Git-досить блок-схема

1 Взято з http://justinhileman.info/article/git-pretty/


12

Додайте файл до попереднього коміту

Якщо ви вже натиснули гілку, над якою працюєте, спочатку перегляньте сторінки довідників. Зокрема, зверніть увагу:

Перебазувати (або будь-яку іншу форму переписування) гілки, на якій працюють інші, є поганою ідеєю: будь-хто після неї змушений вручну виправляти свою історію.

Однак якщо ви не штовхнули свою гілку, підготуйтеся до входу в небезпечну зону .

Знайдіть хеш коміту

По-перше, вам потрібно знати хеш коміту коміту, до якого ви хочете додати. Це показує git log. Ви насправді хочете вказати коміт перед тим, до якого ви хочете додати. (Ви можете вважати це початковим індексом для фрагмента комітів, який ви хочете змінити.) Ви можете переконатися, що у вас є правильний коміт, запустивши git log -1 HEAD~n. Де 'n' - це ціле число, яке ви збільшуєте, поки не отримаєте правильний коміт. Або ти міг порахувати, насправді ні.

Але, якщо ви все-таки підрахуєте, принаймні підтвердьте, що у вас є правильний коміт git log -1 HEAD~5або яким би він не був. Ви НЕ повинні бачити коміт, до якого ви хочете додати.

НЕБЕЗПЕКА , хе

Тепер ви готові до бігу git rebase -i HEAD~5. Або яким би не був ваш хеш коміту. Після цього з’явиться улюблений текстовий редактор та файл для редагування. Файл є списком завдань для команди rebase. Коментарі у файлі повідомляють вам, які варіанти у вас є. Просто знайдіть рядок із комітом, до якого ви хочете додати, і на цьому рядку змініть "вибрати" на "редагувати". Тепер збережіть і закрийте файл.

Перебаза зупиниться, як тільки вона досягне коміту, який ви наказали редагувати. Запустіть a, git statusщоб побачити додаткову інформацію, яку він надає. Поетапно додайте свої файли до фіксації за git add .допомогою назв файлів або будь-яких інших.

Тоді зробіть git commit --amend. Це внесе зміни до коміту, який ви обрали для редагування.

Нарешті, біжи git rebase --continue.

Якщо ви сумніваєтесь, у Linux ви можете дізнатись більше, прочитавши документи, що виводяться man git-rebaseабо git --help rebase.


2
Щодо "знайти хеш коміту". Не потрібно починати рахувати. Просто використовуйте, git logщоб знайти свій коміт і скопіювати його хеш, а потім скористайтеся git rebase -i hash^перебазуванням попереднього коміту до вашого.
Віктор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.