За последний час или около того я изменил файлы
A
ATest
B
BTest
Чтобы убедиться, что мои сообщения о фиксации совпадают с фактическим изменением, зафиксированным A
с описанием. К сожалению, я не включился ATest
в этот коммит.
Между тем, до сих пор не совершены B
и BTest
.
Как лучше всего действовать на этом этапе? Я бы тоже хотел:
- Отменить предыдущую фиксацию, не затрагивая мои текущие незафиксированные файлы?
- Добавить еще один файл с тем же описанием в предыдущий коммит?
Ответы:
Чтобы добавить новый файл к предыдущей фиксации:
Вы можете использовать,
git commit --amend --no-edit
если не хотите изменять сообщение фиксации.источник
git rebase -i
для изменения порядка коммитов и слияния коммит нового файла с другим коммитом. Это может быть материалом для отдельного вопроса.git rebase -i
как предлагает @DavidZ, все, что вам нужно сделать, это переместить новый коммит чуть ниже того, с которым вы хотите его объединить, и изменить слово нового коммита наsquash
вместоpick
git reset
), затем подготовьте тот, который вы хотите добавить, измените фиксацию, затем снова выполните этапирование всех файлов.Вот забавная блок-схема 1, которая также на удивление удобна: она дает правильные рекомендации как для исходного вопроса, так и для измененного «Что, если бы это была не последняя фиксация?» вопрос.
1 Взято с http://justinhileman.info/article/git-pretty/
источник
Добавить файл в предыдущую фиксацию
Если вы уже запустили ветку, над которой работаете, сначала просмотрите справочные страницы . В частности, обратите внимание:
Однако, если вы не толкнули ветку, приготовьтесь войти в опасную зону .
Найдите хеш фиксации
Во-первых, вам нужно знать хэш коммита, который вы хотите добавить. Об этом свидетельствует
git log
. На самом деле вы хотите указать фиксацию до той, которую вы хотите добавить. (Вы можете рассматривать его как начальный индекс части коммитов, которые вы хотите изменить.) Вы можете убедиться, что у вас есть правильный коммит, запустивgit log -1 HEAD~n
. Где n - целое число, которое вы увеличиваете, пока не получите правильную фиксацию. Или вы могли посчитать, нет, правда.Но, если вы считаете, по крайней мере, подтвердите, что у вас есть правильная фиксация
git log -1 HEAD~5
или что бы там ни было. Вы НЕ должны видеть коммит, который хотите добавить.ОПАСНО , хе
Теперь вы готовы к бегу
git rebase -i HEAD~5
. Или какой у вас хеш фиксации. Откроется ваш любимый текстовый редактор и файл для редактирования. Этот файл представляет собой список дел для команды rebase. Комментарии в файле расскажут, какие у вас есть варианты. Просто найдите строку с коммитом, к которому вы хотите добавить, и в этой строке измените «выбрать» на «редактировать». Теперь сохраните и закройте файл.Перебазирование остановится, как только достигнет фиксации, которую вы сказали ему отредактировать. Запустите,
git status
чтобы увидеть дополнительную информацию, которую он предоставляет. Подготовьте ваши файлы для добавления в коммитgit add .
или с другими именами файлов.Тогда сделай
git commit --amend
. Это изменит коммит, который вы выбрали для редактирования.Наконец, беги
git rebase --continue
.В случае сомнений, в Linux вы можете узнать больше, прочитав документацию, выводимую
man git-rebase
илиgit --help rebase
.источник
git log
чтобы найти свой коммит и скопировать его хэш, а затем используйтеgit rebase -i hash^
для перебазирования на коммит, предшествующий вашему .