Help us understand the problem. What is going on with this article?

gitで過去の特定のファイルを持ってくる

More than 5 years have passed since last update.

gitの仕様が変わったためか、ぐぐって出てくる情報だとたまに古いのか新しいのか分からないのでgit 1.7.2.5で動いた情報を共有。
新しくコミットしたものの、あるファイルだけ特定の古いコミットの物で上書きしたくなるときがあります。

動かなかったやり方

$ git checkout HEAD^:hoge.py

で、1個前のコミットのhoge.pyを持ってきて現在の作業ディレクトリに上書きできる、と書いている事もあります。

fatal: reference is not a tree: HEAD^:hoge.py

と出て動かないという状況になることもあります。

動いたやり方

こうしたら動きました。

$ git checkout HEAD^ -- hoge.py

古いドキュメントのものとは記法が違うみたいです。成功したらgit statusで状況を見てみましょう。
git diffの時も同様のようです。

$ git diff HEAD^:hoge.py  # NG
$ git diff HEAD^ -- hoge.py  # OK(HEAD^から現在の最新の状態になるまでのdiffが表示される)

ですがgit showは動く様子。

$ git show HEAD^:hoge.py  # OK(ファイルの内容が表示される)
$ git show HEAD^ -- hoge.py  # OK(最新の状態からHEAD^に変更するためのdiffが表示される)

以下gitがわかってる人には不要な情報

HEAD^は一個前のコミットという意味でありHEAD^^は二個前のコミットを意味します。
必要に応じて^を付けましょう。

HEAD^^^^^などと付けていくとどれを指してるか分からなくなって事故の元なのでgit logコマンドでコミット一覧を見て、commit eda012e1...などと書いてある行から

$ git checkout eda012 -- hoge.py

などとコミットログのIDの先頭6文字位を指し示せばよしなに動いてくれます。
既にブランチ名やタグが振ってあるコミットの場合にはその名前を使っても行けるはず。

kumagi
ロックフリーです。
http://d.hatena.ne.jp/kumagi/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした