Как отменить и спрятать предыдущий коммит, который не последний? - PullRequest
0 голосов
/ 03 октября 2019

Интересно, возможно ли это вообще? Я совершил некоторые изменения, commitA, а затем еще и еще ... commitB, commitC. Теперь я понял, что на данный момент я не хочу commitA в коде, их нужно сначала просмотреть.

Так что мне нужно отменить эту фиксацию и спрятать ее для проверки и повторной фиксации. Есть ли простой способ сделать это? Или я должен просто отменить эти изменения вручную, зафиксировать их, затем снова ввести изменения и спрятать их?

Ответы [ 2 ]

2 голосов
/ 03 октября 2019

Если вы уже поделились коммитом, то да, вам лучше отменить его и повторить его позже после проверки. Если у вас нет, то вы можете просто сделать интерактивный ребаз. Начиная с чистого рабочего каталога:

git rebase -i <commitA>^

Текстовый редактор откроет файл примерно так:

pick <commitA> some commit message...
pick <commitB> blah blah...
pick <commitC> blah blah...

Измените «выбор» на «редактировать», сохранить ивыйти из редактора. будет автоматически извлечен.

git reset HEAD^
git stash -u
git rebase --continue

Оставшиеся коммиты будут воспроизведены без.

Имейте в виду, что если последующие коммиты будут полагаться, вы получите конфликты слияния.


Как указывает sbat в комментариях;если вы решите вернуться, вам не нужно вручную отменять изменения. Вы можете использовать команду git revert.

1 голос
/ 03 октября 2019

Хмм ..... я уже ответил что-то вроде этого ... предположим, что какая-то ветка указывает на commitC

git checkout commitA
git reset --soft HEAD~
git stash save 'stashing commit A'
git rebase --onto HEAD commitA some-branch # get rid of commit A
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...