Как добавить, что измененный файл к более старому (не в последний раз) фиксирует в Мерзавце

Я изменил несколько вещей за прошлый час и фиксировал их шаг за шагом, но я просто понял, что имею, забыл добавлять измененный файл некоторые фиксации назад.

Журнал похож на это:

GIT TidyUpRequests u:1 d:0> git log 
commit fc6734b6351f6c36a587dba6dbd9d5efa30c09ce 
Author: David Klein <> 
Date:   Tue Apr 27 09:43:55 2010 +0200

    The Main program now tests both Webservices at once

commit 8a2c6014c2b035e37aebd310a6393a1ecb39f463 
Author: David Klein <>
Date:   Tue Apr 27 09:43:27 2010 +0200

    ISBNDBQueryHandler now uses the XPath functions from XPath.fs too

commit 06a504e277fd98d97eed4dad22dfa5933d81451f 
Author: David Klein <> 
Date:   Tue Apr 27 09:30:34 2010 +0200

    AmazonQueryHandler now uses the XPath Helper functions defined in XPath.fs

commit a0865e28be35a3011d0b6091819ec32922dd2dd8 <--- changed file should go here
Author: David Klein <> 
Date:   Tue Apr 27 09:29:53 2010 +0200

    Factored out some common XPath Operations

Какие-либо идеи?

401
задан lmiguelvargasf 4 December 2017 в 07:01
поделиться

3 ответа

Используйте git rebase . В частности:

  1. Используйте git stash , чтобы сохранить изменения, которые вы хотите добавить.
  2. Используйте git rebase -i HEAD ~ 10 (или сколько угодно коммитов, которые вы хотите увидеть).
  3. Отметьте коммит, о котором идет речь ( a0865 ... ), для редактирования, изменив слово pick в начале строки на edit . Не удаляйте другие строки, так как это приведет к удалению коммитов. [^ Vimnote]
  4. Сохраните файл перебазирования, и git вернется в оболочку и будет ждать, пока вы исправите эту фиксацию.
  5. Откройте тайник с помощью git stash pop
  6. Добавьте файл с помощью git add .
  7. Измените фиксацию с помощью git commit --amend --no-edit .
  8. Выполните git rebase --continue , который перезапишет остальные ваши коммиты в соответствии с новым.
  9. Повторите, начиная с шага 2, если вы отметили более одной фиксации для редактирования.

[^ vimnote]: если вы используете vim , вам нужно будет нажать Вставьте клавишу для редактирования, затем Esc и введите : wq , чтобы сохранить файл, выйдите из редактора и примените изменения. В качестве альтернативы вы можете настроить удобный редактор git commit с помощью git config --global core.editor "nano" .

593
ответ дан 22 November 2019 в 23:38
поделиться

с git 1.7 есть действительно простой способ с помощью git rebase :

разместить ваши файлы:

git add $files

создать новый зафиксируйте и повторно используйте сообщение фиксации вашей "сломанной" фиксации

git commit -c master~4

prepend fixup! в строке темы (или squash! , если вы хотите отредактировать фиксацию (сообщение)):

fixup! Factored out some common XPath Operations

используйте git rebase -i --autosquash , чтобы исправить вашу фиксацию

59
ответ дан 22 November 2019 в 23:38
поделиться

Вы можете попробовать сеанс rebase --interactive , чтобы изменить свою старую фиксацию (при условии, что вы еще не нажали ] те совершают другое репо).

Иногда вещь фиксируется в п.2. не может быть изменен на не совсем идеальный коммит, который он исправляет, , потому что этот коммит глубоко похоронен в серии патчей .
Именно для этого и предназначена интерактивная перебазировка: используйте ее после множества "a" и "b", переупорядочивая и редактируя коммиты, и объединяя несколько коммитов в один.

Начните его с последнего коммита, который вы хотите сохранить как есть:

git rebase -i <after-this-commit>

В редакторе будут запущены все коммиты в вашей текущей ветке (игнорируя коммиты слияния), которые идут после данного коммита.
Вы можете изменить порядок коммитов в этом списке по своему усмотрению и удалить их. Список выглядит примерно так:

pick deadbee The oneline of this commit
pick fa1afe1 The oneline of the next commit
...

Однострочные описания предназначены исключительно для вашего удовольствия; git rebase будет смотреть не на них, а на имена коммитов («deadbee» и «fa1afe1» в этом примере), поэтому не удаляйте и не редактируйте имена.

Заменив команду «pick» на команду «edit», вы можете указать git rebase остановиться после применения этой фиксации, чтобы вы могли редактировать файлы и / или сообщение фиксации, изменять фиксацию и продолжать перебазирование. .

8
ответ дан 22 November 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: