Я добавил некоторые функции в свой проект, который взял 4 git commits, теперь бизнес просит, чтобы функциональность больше не нужна (спустя более месяца). Поэтому мне нужно удалить эти конкретные git commit (s) из моего репо, которое теперь имеет еще 27 коммитов после этого.Удалите git commit между двумя коммитами
ответ
Потому что вы имеете дело с опубликованной отраслью, которая, предположительно, используется кем-то другим, чем вы, я бы рекомендовал вернуть два коммиты с помощью git revert
. От отрасли, о которой идет речь:
git log
и найти хеши SHA-1 из двух комманд. Затем вернуть их с помощью:
git revert abcd1234..foobar12
где abcd1234
является хэш из первых (старейшей) двух фиксаций и foobar12
является более последней из двух фиксаций.
Использование git revert
будет добавлять коммиты, которые эффективно отменяют две коммиты, похороненные в вашей ветке. Альтернативой этому подходу было бы использовать ветвь rebase или filter. Но оба эти метода включают переписывание истории вашей отрасли. Это может вызвать головную боль для любого другого, использующего вашу ветку, поскольку они больше не смогут тянуть или толкать.
Есть четыре способа сделать это:
Чистый путь, возвращаясь, но сохранить в лог Revert:
git revert --strategy resolve <commit>
Harsh путь, удалить всего лишь последний коммит:
git reset --soft "HEAD^"
Rebase (показать журнал последних 5 коммитов и удалить строки вы не хотите, или изменить порядок или сквош множественным совершает в одном, или сделать что-нибудь еще вы хотите, это очень универсальный инструмент):
git rebase -i HEAD~5
И если ошибка делается:
git rebase --abort
Быстрый перебазироваться: удалить только конкретный коммит используя свой идентификатор:
git rebase --onto commit-id^ commit-id
Альтернативы: Вы можете также попробовать:
git cherry-pick commit-id
Еще одна альтернатива:
git revert --no-commit
В крайнем случае, если вам нужна полная свобода редактирования истории (например, потому что мерзавец не позволяют редактировать то, что вы хотите), вы можете использовать это приложение very fast с открытым исходным кодом: reposurgeon.
Примечание: конечно, все эти изменения делаются на местном уровне, вы должны git push
впоследствии применить изменения в пульте дистанционного управления. И в случае, если ваше репо не хочет удалять фиксацию («нет быстрого перехода вперед», что происходит, когда вы хотите удалить фиксацию, которую вы уже нажали), вы можете использовать git push -f
, чтобы принудительно нажать на изменения.
Примечание2: если вы работаете с веткой, и вам нужно принудительно нажать, вы должны полностью избегать git push --force
, потому что это может перезаписать другие ветви (если вы вносили изменения в них, даже если ваша текущая проверка находится на другой ветке). Предпочтительно, чтобы всегда указывал дистанционную ветвь, когда вы нажимаете push: git push --force origin your_branch
.
- 1. Переключение Git между коммитами
- 2. Разница между двумя коммитами с двумя разными родительскими коммитами
- 3. Как получить интердифф между этими двумя git-коммитами?
- 4. git rebase: движущиеся фрагменты между коммитами
- 5. Git. Отверстие функции проверки между коммитами слияния
- 6. Однофайловая разность между двумя коммитами
- 7. Nodegit - получить разницу между двумя коммитами
- 8. Git содержит между произвольными коммитами
- 9. Git сохранить сырые файлы между коммитами
- 10. Получить список всех тегов между двумя коммитами
- 11. Проверка между двумя коммитами в локальном репо
- 12. Git слияние изменений между двумя конкретными коммитами из другой ветви
- 13. Сохранение всего git diff между двумя коммитами в текстовом файле
- 14. git diff файл между двумя последними коммитами, которые его изменили
- 15. git: показать все файлы, измененные между двумя коммитами
- 16. Можете ли вы получить фактические различия между двумя git-коммитами?
- 17. Удаление фиксации между другими коммитами
- 18. Что происходит со старыми коммитами после использования `git commit -amend`?
- 19. Удалите git commit, который не нажал
- 20. Git - Интерактивный журнал/переключение между коммитами
- 21. Grit: как рассказать между двумя коммитами, которые новее?
- 22. Перемещение файлов между коммитами
- 23. Как показать изменения между коммитами с JGit
- 24. Разница между git checkout [commit] и git checkout [commit] file
- 25. В чем разница между git commit и git commit-tree
- 26. git create commit from diff между двумя ветвями
- 27. Сколько строк кода отличается между двумя коммитами или двумя ветвями?
- 28. Получить список измененных файлов между двумя коммитами или ветвями
- 29. код покрытия новых строк между двумя коммитами в рубине
- 30. Игнорировать * все * пробелы изменяются с помощью git-diff между коммитами
Большинство из этих методов не будут работать, потому что OP совершает погребение внутри ветки. И переписать историю филиала не следует предлагать для общего публичного филиала –