Удалить и полностью удалить коммит из git history

git github push git-commit post-commit

3907 просмотра

2 ответа

У меня есть коммиты в моей истории Git

1.commit 4930da17d8dd23d650ed38435d8b421816a0c451
  Date:   Sat Dec 5 14:34:18 2015 +0530

2.commit e1ebbbb599ee20ebec3ca92c26266d9fd16e7ccc
  Date:   Sat Dec 5 13:22:20 2015 +0530

3.commit 1c4a11a80eb054d24dafec2efed0b0282188e687
  Date:   Sat Dec 5 12:11:50 2015 +0530

4.commit b4ab3c164a3a8d93e0a71a94b5c561cb5e20ebf6
  Date:   Sat Dec 5 12:09:56 2015 +0530

5.commit 167b1d10258381f09663ce61fa88ce3bbcd404c4
  Date:   Sat Dec 5 12:09:21 2015 +0530

6.commit c61bcadac673e1c83f4c14b66d56e23b12fa3198
  Date:   Sat Dec 5 12:07:58 2015 +0530

В этом 3-м и 4-м коммите содержится неправильный код, но я неосознанно совершил и подтолкнул.

3.commit 1c4a11a80eb054d24dafec2efed0b0282188e687
  Date:   Sat Dec 5 12:11:50 2015 +0530

4.commit b4ab3c164a3a8d93e0a71a94b5c561cb5e20ebf6
  Date:   Sat Dec 5 12:09:56 2015 +0530

Но 5-й и 6-й коммиты содержат правильный код. Мне нужно, чтобы этот коммит работал.

5.commit 167b1d10258381f09663ce61fa88ce3bbcd404c4
  Date:   Sat Dec 5 12:09:21 2015 +0530

6.commit c61bcadac673e1c83f4c14b66d56e23b12fa3198
  Date:   Sat Dec 5 12:07:58 2015 +0530

Теперь я хочу полностью удалить и удалить все, что я изменил в 3-м и 4-м коммите.

Я хочу удалить 3-й и 4-й коммит из истории git. Но не 5-й и 6-й.

Так что моя ветка будет в безопасности.

Автор: vijay Источник Размещён: 15.10.2019 05:03

Ответы (2)


3 плюса

Вы можете интерактивно переписать историю с помощью git rebase -i:

git rebase HEAD~6 -i 

Откроет ваш редактор и позволит вам либо раздавить несколько коммитов в один, либо полностью удалить их из истории (удалив строку для этих коммитов в вашем редакторе.) ~ 6 означает переписать последние 6 коммитов, -i означает сделать это в интерактивном режиме. В вашем случае вы захотите удалить строки с надписью «pick 1c4a11a» и «pick b4ab3c».

Обратите внимание, что самый последний коммит в редакторе, который запускается, - это последняя строка, а не первая, и, поскольку вы переписываете историю и уже нажали, вам также нужно будет нажать «git push --force», не просто "git push" для того, чтобы отправить ваши изменения в апстрим.

Автор: driusan Размещён: 12.01.2016 03:24

1 плюс

Вы можете использовать interactive rebaseдля того, чтобы вернуться в историю коммитов и действовать по-другому. Для использования интерактивной перебазировки просто:

git rebase -i <commit_id>

<commit_id>является родителем последнего коммита, который вы хотите отредактировать. После выполнения этой команды просто поместите dили dropперед коммитами, которые вы собираетесь удалить, или даже удалите строку, соответствующую этому коммиту.

Выполнение этой команды дает вам список коммитов в вашем текстовом редакторе, который выглядит примерно так:

pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added cat-file

# Rebase 710f0f8..a5f4a0d onto 710f0f8
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

Интерактивная перебазировка дает вам скрипт, который он собирается запустить. Он начнется с коммита, который вы укажете в командной строке, и воспроизведет изменения, внесенные в каждый из этих коммитов сверху вниз. Он перечисляет самый старый вверху, а не самый новый, потому что это первый, который он будет воспроизводить.

Но так как вы отправили ветку в свой исходный репозиторий, передайте эту переписанную историю вашим возможным коллегам, как говорится в документации git :

Помните еще раз, что это команда перебазирования - каждый коммит, включенный в диапазон, будет переписан независимо от того, изменили вы сообщение или нет. Не включайте какие-либо коммиты, которые вы уже отправили на центральный сервер - это может сбить с толку других разработчиков, предоставив альтернативную версию того же самого изменения.

Автор: Ali Dehghani Размещён: 12.01.2016 03:16
Вопросы из категории :
32x32