В моем git-репо, который отслеживает svn-репо, я внес несколько изменений в один файл.
Теперь я хочу отменить эти изменения (например, svn revert), но только части файла.
Я хочу иметь возможность просматривать различия в файле, отменить (отменить) изменения, которые мне не нужны, и сохранить изменения, которые я хочу.
git add -i
Команда, кажется, имеет возможность сделать это, но я пока не хочу ставить это.
источник
Я считаю, что вы можете сделать это проще всего с:
Из справочной страницы:
источник
a
опцию в режиме патча для удаления всего файла, ноgit checkout -- <file>
работает как положено. Кто-нибудь знает почему?Вы можете запустить
git diff
файл, сохранить результирующий diff, отредактировать его, чтобы удалить изменения, которые вы хотите сохранить, а затем запустить его,patch -R
чтобы отменить оставшиеся diff.источник
git diff
показывает весь файл как измененный. Обычно это происходит, когда вы сохранили файл, используя разные окончания строк, чем это было ранее. Это также может привестиpatch
к отклонению файла исправления. Похоже ли это на то, что могло случиться?Похоже, вы хотите
Вы можете использовать
чтобы увидеть, какие изменения будут внесены перед фиксацией (поскольку возврат - это просто фиксация в прямом направлении, которая копирует обратную перемену в прошлом)
Если бы вы работали с чистым Git-репозиторием, вы могли бы, в зависимости от ваших целей, использовать интерактивную rebase (
git rebase -i
), чтобы вернуться к коммиту, который вам не понравился, и отредактировать коммит задним числом, чтобы изменения, которые вам не нравились, никогда не происходили , но это обычно только потому, что если вы ЗНАЕТЕ, вы никогда не захотите увидеть это снова.источник
Перечитывая вопрос, звучит так, как будто вы хотите отменить изменения, которые есть в вашем рабочем дереве, а не изменения, которые были ранее зафиксированы, но некоторые другие ответы заставляют это звучать так, будто мое чтение может быть неправильным. Вы можете уточнить?
Если изменения находятся только в вашей рабочей копии, то самый простой способ сделать это - внести изменения, которые вы хотите сохранить:
Затем отбросьте изменения, которые вы не хотите сохранять, проверив версию индекса:
Затем отмените внесение изменений, если вы не хотите, чтобы они были поставлены:
Этот рецепт отменяет только выбранные изменения в файле (или файлах, которые вы укажете) и не создает никаких временных фиксаций, которые затем необходимо отменить.
Если вы хотите выборочно применить только некоторые изменения, внесенные в предыдущих фиксациях, вы можете сначала сбросить файл до предыдущего зафиксированного состояния:
Затем вы можете следовать предыдущему рецепту,
git add -i <file>
чтобы внести те изменения, которые вы хотите сохранить,git checkout -- <file>
отбросить нежелательные изменения иgit reset -- <file>
«удалить их».источник
Параметры командной строки, описанные в ответах здесь, удобны, когда файл находится на сервере, к которому я обращаюсь через ssh-терминал. Однако, когда файл находится на моей локальной машине, я предпочитаю следующий путь:
Откройте файл в редакторе netbeans (который поставляется с поддержкой git). Netbeans ставит красные / зеленые / синие метки на номера строк, чтобы указать, где материал был удален / добавлен / изменен (соответственно).
Щелчок правой кнопкой мыши по любой из этих меток дает вам возможность отменить это изменение. Кроме того, вы можете щелкнуть правой кнопкой мыши на красные и синие метки, чтобы увидеть, как старая версия появляется во всплывающем окне.
источник