Отменить часть неустановленных изменений в git

Принцип Pigeonhole объясняет, почему то, что вы просите, невозможно в отношении уникальности.

145
задан asmeurer 30 December 2009 в 19:00
поделиться

5 ответов

Вы можете использовать git checkout -p, который позволяет вам выбирать отдельные hunks из различия между вашей рабочей копией и индексом для возврата. Аналогичным образом, git add -p позволяет вам выбирать отдельные hunks для добавления в индекс, а git reset -p позволяет вам выбирать отдельные hunks из разницы между индексом и HEAD, чтобы отказаться от индекса.

$ git checkout -p file/to/partially/revert
# or ...
$ git checkout -p .

Если вы хотите заранее сделать снимки своего git-репозитория, чтобы сохранить эти изменения перед их реверсированием, мне нравится:

$ git stash; git stash apply

Если вы используете так часто, вы можете захотеть использовать псевдоним:

[alias]
    checkpoint = !git stash; git stash apply

Перевернуть отдельные hunks или линии может быть ещё проще, если вы используете хороший режим редактора или плагин, который может обеспечить поддержку выбора строк непосредственно для реверсирования, так как -p может быть немного неудобно использовать иногда. Я использую -p, режим Emacs, который очень полезен для работы с Git'ом. В Magit'е можно запустить magit-status, найти различия для изменений, которые нужно вернуть, выбрать линии, которые нужно вернуть (или просто навести курсор на те, которые нужно вернуть, если нужно вернуть подвеску за раз вместо линии за раз), и нажать k, чтобы вернуть эти конкретные линии. Я настоятельно рекомендую Magit, если вы используете Emacs.

.
253
ответ дан 23 November 2019 в 22:06
поделиться

Как насчёт

  1. Откат затрагиваемых файлов с изменениями из индекса
  2. использует git добавление -p, чтобы добавить обратно только те изменения, которые вы хотите внести в индекс.
1
ответ дан 23 November 2019 в 22:06
поделиться

Вы можете сделать

git checkout master -- path/to/file

Для каждого файла, который вы хотите сбросить.

.
5
ответ дан 23 November 2019 в 22:06
поделиться
[

] Когда я запускаю "git status", он говорит: [

] [
$ git status
# On branch fr/fr.002
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   makefile
#
no changes added to commit (use "git add" and/or "git commit -a")
$
] [

] Итак, чтобы отменить нестационарные правки, он говорит мне бежать: [

] [
git checkout -- makefile
]
1
ответ дан 23 November 2019 в 22:06
поделиться

вы можете сделать git checkout и дать ему названия частей, которые вы хотите отменить.

0
ответ дан 23 November 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: