Используйте "git revert", чтобы отменить изменение, добавив строку?
Следующий pastebin - это репо с одним файлом с одним, двумя, тремя, четырьмя и пятью строками в каждой строке.
Каждая строка помещалась отдельно в git:
http://pastebin.ca/raw/2136179
Затем я попытался удалить строку с помощью команды git revert <commmit which creates two>
И получим:
error: could not revert b4e0a66... second
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
Не должно быть конфликта для чего-то такого простого? Или я делаю это неправильно/получил неправильную команду?
Детали слияния также не имеют смысла:
one
<<<<<<< HEAD
two
three
four
five
=======
>>>>>>> parent of b4e0a66... second
Разве это не означает удаление всего, кроме одного? Я ожидал, что только два будут затронуты...
git 1.7.10
Ответы
Ответ 1
Я попытался повторить шаги и нашел ту же проблему. Кажется, что вы можете вернуть только самые последние коммиты.
В моем репозитории:
$ git log --oneline
9a25594 five
f8f1ec4 four
3c75345 three
e6cd245 two
8349ccc one
d2f16c4 for stkofl <<==== ignore this one
$ git revert 9a25 --no-edit
Finished one revert.
[master 82bbc79] Revert "five"
1 files changed, 0 insertions(+), 1 deletions(-)
$ git reset --hard
HEAD is now at 82bbc79 Revert "five"
Отказ от любого набора коммитов, который не является набором последовательных коммитов, включая HEAD (последнее совершение), кажется, запрещен.
Конечно, вы можете сделать это:
$ git show e6cd |patch -R
patching file file
Hunk #1 succeeded at 1 with fuzz 1.
а затем зафиксируйте результат.
Ответ 2
Изменения сохраняются как контекстные различия... если вы посмотрите на diff для third
, вы заметите, что оно применяется в терминах строки, содержащей two
, что означает, что она зависит от фиксации, введено two
. Аналогично, каждая последующая фиксация зависит от непосредственно предшествующего фиксации, поэтому она хочет удалить все коммиты, следующие за тем, который ввел two
(поскольку все они в конечном счете зависят от этого фиксации). Вот почему вы не должны полагаться на возможность вернуть фиксации в общем случае, но только сразу после их фиксации.