Я не думаю, что это возможно. Что вы можете сделать, это несколько компонентов, которые используют один и тот же обработчик событий. В основном, в вашем случае, объявите две кнопки и используйте один и тот же метод обработчика событий.
Вы можете сделать это напрямую с помощью git checkout -p
. См. ответ Даниэля Штутцбаха ниже.
Старый ответ (до появления checkout -p
):
Вы можете сделать это следующим образом:
git add -i
(выберите скряга вы хотите сохранить)
git commit -m "tmp"
Теперь у вас есть фиксация только с теми изменениями, которые вы хотите сохранить, а остальные неустановлены.
git reset --hard HEAD
На этом этапе незафиксированные изменения были отброшены, поэтому у вас есть чистый рабочий каталог с изменения, которые вы хотите сохранить наверху.
git reset --mixed HEAD^
Это удаляет последнюю фиксацию ('tmp'), но сохраняет изменения в рабочем каталоге, неустановленными.
РЕДАКТИРОВАТЬ: заменено - soft
на - смешанный
, чтобы очистить промежуточную зону.
Re-reading the question, it sounds like you want to revert changes that are in your working tree and not changes that have been previously committed but some of the other answers make it sound like my reading may be wrong. Can you clarify?
If the changes are just in your working copy then the easiest way to do this is to stage the changes you want to keep with:
git add -i <file>
Then throw away the changes that you don't want to keep by checking out the index version:
git checkout -- <file>
Then unstage the changes if you don't want them staged yet:
git reset -- <file>
This recipe only reverts selected changes to the file (or files that you specify) and doesn't create any temporary commit that then needs reverting.
If you want to selectively apply only some of the changes made in previous commits then you can reset a file to a previous committed state first:
git reset <commit_before_first_unwanted_change> -- <file>
Then you can follow the previous recipe of git add -i
to stage those changes that you want to keep, git checkout --
to throw away the unwanted changes and git reset --
to 'unstage' the changes.
Вы можете запустить git diff
для файла, сохранить полученный diff, отредактировать его, чтобы удалить изменения, которые вы do хотите сохранить, а затем запустить это через патч -R
, чтобы отменить оставшиеся различия.
git diff file.txt >patch.tmp # edit patch.tmp to remove the hunks you want to keep patch -R <patch.tmp
Похоже, вы хотите
git revert --no-commit $REVSISON
Затем вы можете использовать
git diff --cached
, чтобы увидеть, какие изменения будут внесены перед фиксацией (например, возврат это просто фиксация в прямом направлении, которая воспроизводит обратное изменение в прошлом)
Если бы вы использовали чистый репозиторий Git, вы могли бы, в зависимости от ваших целей, использовать интерактивную перебазировку ( git rebase - i
), чтобы вернуться к фиксации, которая вам не понравилась, и отредактировать фиксацию задним числом, чтобы изменения, которые вам не нравятся, никогда не происходили, но это обычно только в том случае, если вы ЗНАЕТЕ , что вы никогда не хочу видеть это снова.
git rebase -i
), чтобы вернуться к фиксации, которая вам не понравилась, и отредактируйте фиксацию задним числом, чтобы изменения, которые вам не нравились, никогда не происходили, но это обычно только в том случае, если вы ЗНАЙТЕ , что вы больше никогда не захотите его видеть. используйте интерактивную перебазировку ( git rebase -i
), чтобы вернуться к фиксации, которая вам не понравилась, и отредактируйте фиксацию задним числом, чтобы изменения, которые вам не нравились, никогда не происходили, но это обычно только в том случае, если вы ЗНАЙТЕ , что никогда больше не захотите его видеть. Я считаю, что вы можете сделать это проще всего с помощью:
git checkout -p <optional filename(s)>
Из справочной страницы:
-p, −−patch Интерактивно выберите блоки в разнице между
{{1 }} (или индекс, если не указан) и рабочее дерево. Выбранные блоки затем применяются в обратном порядке к рабочему дереву (и, если был указан, индекс).
This means that you can use git checkout −p to selectively discard
edits from your current working tree.