Я хочу вернуться изменения, внесенные конкретной фиксацией в данный файл только.
Я могу использовать мерзавца, возвращаются команда для этого?
Какой-либо другой простой способ сделать это?
git revert
предназначен для всего содержимого файла в пределах коммита.
Для одного файла вы можете написать скрипт:
#!/bin/bash
function output_help {
echo "usage: git-revert-single-file <sha1> <file>"
}
sha1=$1
file=$2
if [[ $sha1 ]]; then
git diff $sha1..$sha1^ -- $file | patch -p1
else
output_help
fi
(Из git-shell-scripts утилиты от smtlaissezfaire)
Примечание:
другой способ описан здесь, если вы еще не зафиксировали текущую модификацию.
git checkout -- filename
git checkout
имеет некоторые опции для файла, модифицируя файл из HEAD, перезаписывая ваше изменение.
Dropped.on.Caprica упоминает в комментариях:
Вы можете добавить псевдоним в git, чтобы вы могли сделать
git revert-file
и заставить конкретный файл быть отмененным.
См. этот gist.
[alias]
revert-file = !sh /home/some-user/git-file-revert.sh
Я бы просто использовал параметр - no-commit
для git-revert
, а затем удалил файлы вы не хотите возвращаться из индекса до его окончательной фиксации. Вот пример, показывающий, как легко отменить только изменения в foo.c во втором самом последнем коммите:
$ git revert --no-commit HEAD~1
$ git reset HEAD
$ git add foo.c
$ git commit -m "Reverting recent change to foo.c"
$ git reset --hard HEAD
Первый git-reset
«отключает» все файлы, так что мы можем затем добавить обратно только один файл, который мы хотим вернуть. Последний git-reset --hard
избавляет от оставшихся возвратов файлов, которые мы не хотим сохранять.