Я изменил несколько вещей за прошлый час и фиксировал их шаг за шагом, но я просто понял, что имею, забыл добавлять измененный файл некоторые фиксации назад.
Журнал похож на это:
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
Какие-либо идеи?
Используйте git rebase
. В частности:
git stash
, чтобы сохранить изменения, которые вы хотите добавить. git rebase -i HEAD ~ 10
(или сколько угодно коммитов, которые вы хотите увидеть). a0865 ...
), для редактирования, изменив слово pick
в начале строки на edit
. Не удаляйте другие строки, так как это приведет к удалению коммитов. [^ Vimnote] git stash pop
git add
. git commit --amend --no-edit
. git rebase --continue
, который перезапишет остальные ваши коммиты в соответствии с новым. [^ vimnote]: если вы используете vim
, вам нужно будет нажать Вставьте клавишу для редактирования, затем Esc и введите : wq
, чтобы сохранить файл, выйдите из редактора и примените изменения. В качестве альтернативы вы можете настроить удобный редактор git commit с помощью git config --global core.editor "nano"
.
с 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
, чтобы исправить вашу фиксацию
Вы можете попробовать сеанс 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 остановиться после применения этой фиксации, чтобы вы могли редактировать файлы и / или сообщение фиксации, изменять фиксацию и продолжать перебазирование. .