特定のファイルにのみ特定のコミットによって加えられた変更を元に戻したい。
そのためにgit revertコマンドを使用できますか?
他の簡単な方法はありますか?
私がこれを行う最もきれいな方法は、 ここ で説明されています
git show some_commit_sha1 -- some_file.c | git apply -R
VonCの応答に似ていますが、git show
およびgit apply
を使用します。
コミット履歴を変更してもよいと仮定して、以前のコミットで単一のファイルの変更を元に戻すワークフローを次に示します。
たとえば、1つのファイルの変更を元に戻したい(badfile.txt
)コミット中aaa222
:
aaa333 Good commit
aaa222 Problem commit containing badfile.txt
aaa111 Base commit
ベースコミットに基づいてリベースし、問題のコミットを修正して続行します。
1)インタラクティブリベースを開始します。
git rebase -i aaa111
2)pick
をe
(編集用)に変更して、エディターで編集する問題のコミットをマークします。
e aaa222
pick aaa333
3)不良ファイルへの変更を元に戻します。
git show -- badfile.txt | git apply -R
4)変更を追加し、コミットを修正します。
git add badfile.txt
git commit --amend
5)リベースを終了します。
git rebase --continue
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 <hash> <file-loc>
そして、その特定のファイルを元に戻します。
「 この要点 」を参照してください。
[alias]
revert-file = !sh /home/some-user/git-file-revert.sh
--no-commit
にgit-revert
オプションを使用し、インデックスから元に戻したくないファイルを削除してから、最終的にコミットします。次に、最新の2番目のコミットで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
はすべてのファイルを「アンステージング」するため、元に戻すファイルを1つだけ追加して戻すことができます。最後のgit-reset --hard
は、保持したくない残りのファイルの取り消しを取り除きます。
git reset HEAD^ path/to/file/to/revert/in/commit
上記のコマンドはコミットからファイルを取り出しますが、git status
。
git checkout path/to/file/to/revert/in/commit
上記のコマンドは、変更を元に戻します(結果として、HEADと同じファイルを取得します)。
git commit
(パス --amend
コミットを修正します。)
git Push
これにより、すでにコミットされているファイルは削除され、元に戻されます。
上記の手順は、コミットが行われるブランチから実行する必要があります。
はるかに簡単:
git reset HEAD^ path/to/file/to/revert
それから
git commit --amend
その後
git Push -f
ファイルがなくなっており、コミットハッシュ、メッセージなどは同じです。
次の手順を実行できます。
git revert -n <*commit*>
(-n
すべての変更を元に戻しますが、コミットしません)git add <*filename*>
(元に戻し、コミットするファイルの名前)git commit -m 'reverted message'
(元に戻すためのメッセージを追加)