Какой самый простой способ отменить конкретный коммит, это:
- не в голову или голову
- Был сдвинут в пульт.
Потому что, если это не последний коммит,
git reset HEAD
не работает И потому, что он был перенесен на пульт,
git rebase -i
а также
git rebase --onto
вызовет некоторые проблемы в пульте.
Более того, я не хочу действительно изменять историю. Если был плохой код, он был в истории и его можно увидеть. Я просто хочу, чтобы это было в рабочей копии, и я не против обратной фиксации слияния.
Другими словами, что такое Git- эквивалент следующих команд SVN:
svn merge -r 303:295 http://svn.example.com/repos/calc/trunk
который удаляет все изменения с 295 до 302 путем обратного объединения всех изменений в этих ревизиях в качестве нового коммита.
svn merge -c -302 ^/trunk
что отменяет фиксацию 302, конечно, добавляя еще один коммит, который отменяет объединение изменений из этого соответствующего коммита.
Я подумал, что это должна быть довольно простая операция в Git и довольно распространенный вариант использования. В чем еще смысл атомных коммитов?
У нас есть поэтапное копирование и все для того, чтобы коммиты были абсолютно атомарными, разве вы не можете легко отменить один или несколько атомных коммитов?
источник
Мне не нравится автоматическая фиксация,
git revert
которая может быть полезна для некоторых.Если вы просто хотите, чтобы измененные файлы не были автоматически зафиксированы , вы можете использовать
--no-commit
который так же, как
-n
источник
git reset HEAD~1 --soft
если вы уже вернулись без-n
git reset HEAD~n
не решит проблему отмены любого коммита, не достижимого постоянно из головы. Запрос состоит в том, чтобы отменить любой конкретный коммит.git revert --continue
как ему велели. Это сработало, но, к сожалению, покорило результаты. Возможно, мне нужно было сделатьgit revert --no-commit --continue
.git revert
, если вы забыли-n
; потому что в этот момент последний коммит является реверсией, поэтому программный сброс отменяет этот коммит, но не связанные изменения кода возвратаПоскольку это уже было выдвинуто, вы не должны напрямую манипулировать историей.
git revert
будет возвращать определенные изменения из коммита, используя новый коммит, чтобы не манипулировать историей коммитов.источник
Если вы хотите совершить , чтобы вернуться является слиты обязательство (было уже слиты), то вы должны либо
-m 1
или-m 2
опции , как показано ниже. Это позволит git знать, какой родительский коммит из объединенного коммита использовать. Более подробную информацию можно найти ЗДЕСЬ .git revert <commit> -m 1
git revert <commit> -m 2
источник