176

特定のコミットによって行われた変更を特定のファイルのみに戻したい。

そのためにgitrevertコマンドを使用できますか?

それを行う他の簡単な方法はありますか?

4

8 に答える 8

285

これを行うために私が見た中で最もクリーンな方法はここに説明されています

git show some_commit_sha1 -- some_file.c | git apply -R

VonCの応答に似ていますが、とを使用git showgit applyます。

于 2011-08-25T20:12:58.840 に答える
54

コミット履歴を変更しても問題ないと仮定して、以前のコミットで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
于 2015-09-11T16:32:38.487 に答える
21

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
于 2010-04-12T08:54:03.067 に答える
17

はるかに簡単:

git reset HEAD^ path/to/file/to/revert

それから

git commit --amend   

その後

git push -f

ファイルがなくなり、コミットハッシュ、メッセージなどは同じです。

于 2017-05-19T15:37:20.107 に答える
13

--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は、保持したくない残りのファイルの復帰を取り除きます。

于 2010-04-17T22:50:56.087 に答える
9
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

これにより、すでにコミットされているファイルが削除され、元に戻されます。

上記の手順は、コミットが行われるブランチから実行する必要があります。

于 2018-03-12T11:44:46.467 に答える
8

前回のコミットからファイルの変更をリセットしたい場合は、これが私が通常使用しているものです。これが最も簡単な解決策だと思います。

ファイルはステージング領域に追加されることに注意してください。

git checkout <prev_commit_hash> -- <path_to_your_file>

それが役に立てば幸い :)

于 2020-04-08T14:28:46.363 に答える
5

次の手順に従うことができます。

  1. git revert -n <*commit*>-nすべての変更を元に戻しますが、コミットしません)
  2. git add <*filename*>(元に戻してコミットするファイルの名前)
  3. git commit -m 'reverted message'(元に戻すためのメッセージを追加します)
  4. コミットした後、他のファイルの変更を破棄して、元に戻す前にコミットした変更でファイルが更新されたままになるようにします
于 2019-04-09T20:43:28.003 に答える