Проверьте старый коммит и сделайте его новым коммитом [дубликат]
этот вопрос уже есть ответ здесь:
на Git, скажем, я испортил свои коммиты, и я хочу сделать версию 3 коммитов назад как новую версию. Если я это сделаю git checkout xxxx, Он создает новую ветку и кажется, что я могу только слить его? Могу ли я сделать это новая "мастер-версия"?
хочу:
A-B-C-D-E
стать
A-B-C-D-E-F
где F имеет точно такое же содержание как C
если я использую git revert xxxx вместо этого, похоже, что он определенно будет иметь конфликты, и мне нужно вручную решить его.
то, что я действительно хочу, это просто сделать старую фиксацию в какой-то момент новой фиксацией, независимо от того, что находится в моем рабочем каталоге или последней фиксации.
как бы я это сделал это?
6 ответов:
git rm -r . git checkout HEAD~3 . git commitпосле фиксации, файлы в новом
HEADбудет такой же, как они были в редакцииHEAD~3.
похоже, вы просто хотите сбросить до C; то есть сделать дерево:
Б
С
reset:git reset --hard HEAD~3(Примечание: Вы сказали три коммита назад, так что это то, что я написал; в вашем примере C только два коммита назад, так что вы можете использовать
HEAD~2)
вы также можете использовать
revertесли вы хотите, хотя, насколько я знаю, вам нужно сделать реверс один на a время:git revert HEAD # Reverts E git revert HEAD~2 # Reverts Dэто создаст новую фиксацию F, которая имеет то же содержимое, что и D, и G, которое имеет то же содержимое, что и C. Вы можете
rebaseчтобы раздавить их вместе, если вы хотите
это именно то, что я хотел сделать. Я не был уверен в предыдущей команде
git cherry-pick C, это звучит хорошо, но кажется, что вы делаете это, чтобы получить изменения из другой ветви, но не на той же ветке, кто-нибудь пробовал?поэтому я сделал что-то еще, что также сработало : Я получил файлы, которые я хотел вернуть из старого файла фиксации по файлу
git checkout <commit-hash> <filename>ex :
git checkout 08a6497b76ad098a5f7eda3e4ec89e8032a4da51 file.css-> это берет файлы, как они были из старого commit
затем я изменения. И я совершил еще раз.
git status (to check which files were modified) git diff (to check the changes you made) git add . git commit -m "my message"Я проверил свою историю с
git log, и у меня все еще есть моя история вместе с моими новыми изменениями, сделанными из старых файлов. И я тоже мог толкать.обратите внимание, что для возврата в нужное состояние вам нужно поместить хэш фиксации перед нежелательными изменениями. Также убедитесь, что у вас нет незафиксированных изменений, прежде чем сделать это.
элоун сделал это файл за файлом с
git checkout <commit-hash> <filename>но вы можете проверить все файлы более легко, сделав
git checkout <commit-hash> .
другие ответы до сих пор создают новые коммиты, которые отменяют то, что находится в старых коммитах. Можно вернуться назад и как бы" изменить историю", но это может быть немного опасно. Вы должны только сделайте это, если коммит, который вы изменяете, не был перенесен в другие репозитории.
команда, которую вы ищете, это
git rebase --interactiveЕсли вы хотите изменить HEAD~3, команда, которую вы хотите выдать, это
git rebase --interactive HEAD~4. Это откроет текстовый редактор и позволит вам укажите, какие коммиты вы хотите изменить.практика на другом репозитории, прежде чем попробовать это с чем-то важным. Справочные страницы должны дать вам всю остальную информацию, в которой вы нуждаетесь.
Comments