Вернитесь изменения в файле в фиксации

Я хочу вернуться изменения, внесенные конкретной фиксацией в данный файл только.

Я могу использовать мерзавца, возвращаются команда для этого?

Какой-либо другой простой способ сделать это?

95
задан Foreever 30 September 2015 в 12:12
поделиться

2 ответа

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
19
ответ дан 24 November 2019 в 05:46
поделиться

Я бы просто использовал параметр - 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 избавляет от оставшихся возвратов файлов, которые мы не хотим сохранять.

12
ответ дан 24 November 2019 в 05:46
поделиться
Другие вопросы по тегам:

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