Каков самый простой способ отменить конкретную фиксацию, которая:
- не в голове или голове
- Был нажат на удаленный компьютер.
Потому что, если это не последняя фиксация,
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 и довольно распространенный случай использования. В чем еще смысл атомных коммитов?
У нас есть постановка stashing и все, чтобы гарантировать, что коммиты совершенно атомарны, разве вы не сможете отменить один или несколько из этих атомных легко фиксируется?