特定のコミットによって行われた変更を特定のファイルのみに戻したい。
そのためにgitrevertコマンドを使用できますか?
それを行う他の簡単な方法はありますか?
特定のコミットによって行われた変更を特定のファイルのみに戻したい。
そのためにgitrevertコマンドを使用できますか?
それを行う他の簡単な方法はありますか?
これを行うために私が見た中で最もクリーンな方法はここに説明されています
git show some_commit_sha1 -- some_file.c | git apply -R
VonCの応答に似ていますが、とを使用git show
しgit apply
ます。
コミット履歴を変更しても問題ないと仮定して、以前のコミットで1つのファイルの変更を元に戻すワークフローを次に示します。
たとえばbadfile.txt
、commitで1つのファイル()の変更を元に戻したいとし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
(smtlaissezfaireのgit-shell-scriptsユーティリティから)
ノート:
現在の変更をまだコミットしていない場合は、別の方法をここで説明します。
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
はるかに簡単:
git reset HEAD^ path/to/file/to/revert
それから
git commit --amend
その後
git push -f
ファイルがなくなり、コミットハッシュ、メッセージなどは同じです。
--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 checkout <prev_commit_hash> -- <path_to_your_file>
それが役に立てば幸い :)
次の手順に従うことができます。
git revert -n <*commit*>
(-n
すべての変更を元に戻しますが、コミットしません)git add <*filename*>
(元に戻してコミットするファイルの名前)git commit -m 'reverted message'
(元に戻すためのメッセージを追加します)