2009-05-23 10 views
59

最近私のブランチのHEADにエラーがあるファイルをコミットしました。私は、次のことを行う必要があります。Git:前回のコミットからファイルをチェックアウトしてHEADに修正する

  • は1からそのファイルを入手

  • はそのファイルをコミットヘッドに前回のコミット戻って頭に

ことについて行くの最良の方法は何ですか?あなたは実質的にそれを自分で言った

+1

を最も簡単にコピーすることですファイル、使用に影響を与えた前回のコミットハッシュにいくつかのファイルを元に戻す

uiクライアント(またはgithub bitbucketなど)を使用してその特定のコミットのコンテンツをファイルし、現在のファイルに貼り付けてコミットしてください:) – nawfal

答えて

91

:そして、それをコミット

$> git checkout HEAD~1 path/to/file.ext 

まず前にコミット戻って1からファイルを取得

$> git commit -a -m 'Retrieved file from older revision' 

ものにのみ変更された場合最後のコミットに存在するファイル、あなたも使用できますgit-revert

$> git revert HEAD 

これは別のコミットにする方が良いと思います。なぜなら、それはあなたが元に戻したものとその理由を正確に伝えるからです。しかし、--amendスイッチをgit-commitに切り替えることで、これを前回のコミットに縮退することができます。

+0

--amendはgit commitのスイッチで、git addではなく – bdonlan

+0

おっと、そうです。一定。 – sykora

+0

git-revert *は別のコミットを行います(あなたの説明から完全にはっきりしませんでした)。 "git commit --amend"を使うと、最後のコミットを修正するのではなく、新しいonを作成することができます(ただし、履歴のこの部分を公開した場合は実行できません)。 –

0

は、このシナリオでは、気をつけてください:〜1(またはHEAD ^)

Commit hash - File modified 
aaaaaaa  index.php 
bbbbbbb  test.php 
ccccccc  index.php 

GitチェックアウトのHEADは、index.phpの前のHEADハッシュ(BBBBBBB)にindex.phpファイルをチェックアウトしようとするが、これではありません実際の前回のコミットハッシュファイルはcccccccです。以前のHEADハッシュでは、最後に変更されたものがハッシュcccccccで作成されたため、index.phpは変更されません。

git log -n 2 --pretty=format:%h path/to/file.ext 

は、その後、最初のハッシュを無視し、第2のハッシュを取る:

git checkout <second_hash> path/to/file.ext 
git commit -m 'Revert this file to real previous commit' 
関連する問題