За последний час я изменил несколько вещей и сделал их шаг за шагом, но я только что понял, что забыл добавить измененный файл несколько коммитов назад.
Журнал выглядит так:
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 <file>
.git commit --amend --no-edit
.git rebase --continue
что перезапишет остальные ваши коммиты против нового.[^ vimnote]: если вы используете,
vim
вам нужно будет нажать Insertклавишу для редактирования, затем Escввести текст,:wq
чтобы сохранить файл, выйти из редактора и применить изменения. Кроме того, вы можете настроить удобный редактор git commit с помощьюgit config --global core.editor "nano"
.источник
git add
.edit
, НЕ УДАЛЯЙТЕ другие коммиты, перечисленные в файле. Если вы это сделаете, коммиты будут удалены, и вам нужно будет выполнить следующие шаги, чтобы вернуть их.git add .
Чтобы «исправить» старый коммит с небольшим изменением, не изменяя сообщение коммита старого коммита, где-
OLDCOMMIT
то вроде091b73a
:Вы также можете использовать
git commit --squash=OLDCOMMIT
для редактирования старого сообщения коммита во время перебазирования.git rebase --interactive
вызовет текстовый редактор (который можно настроить ) для подтверждения (или редактирования) последовательности команд rebase . В файле есть информация об изменениях инструкции rebase ; просто сохраните и выйдите из редактора (:wq
invim
), чтобы продолжить ребазинг.--autosquash
автоматически поместит любые--fixup=OLDCOMMIT
коммиты в желаемом порядке. Обратите внимание, что--autosquash
действует только при использовании этой--interactive
опции.^
ВOLDCOMMIT^
помощи это ссылка на коммит непосредственно передOLDCOMMIT
.Вышеуказанные шаги полезны для проверки и / или изменения последовательности команд rebase , но также можно пропустить / автоматизировать интерактивный текстовый редактор rebase:
GIT_SEQUENCE_EDITOR
в скрипт .Смотрите git commit и git rebase . Как всегда, при переписывании истории git вы должны только фиксировать или фиксировать коммиты, которые вы еще никому не публиковали (включая случайных пользователей интернета и серверы сборки).
источник
--autosquash
действует только при использовании--interactive
опции .git config --global core.editor "pico"
. Есть несколько других способов настроить git и / или изменить редактор вашей системы по умолчанию и так далее.с git 1.7 есть действительно простой способ использования
git rebase
:подготовить ваши файлы:
создать новый коммит и повторно использовать сообщение коммита вашего «битого» коммита
добавьте
fixup!
в строку темы (илиsquash!
если вы хотите редактировать коммит (сообщение)):использовать,
git rebase -i --autosquash
чтобы исправить ваш коммитисточник
You asked me to rebase without telling me which branch you want to rebase against, and 'branch.master.merge'
и если я использую его,git rebase -i --autosquash
я просто получаюnoop
строку темы, перебрасывая коммит на себя. Есть идеи, что я делаю не так?git rebase -i --autosquash HEAD~10
Вы можете попробовать
rebase --interactive
сеанс, чтобы изменить свой старый коммит (при условии, что вы еще не передали эти коммиты в другое репо).источник