11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-03-10

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文字位を指し示せばよしなに動いてくれます。
既にブランチ名やタグが振ってあるコミットの場合にはその名前を使っても行けるはず。

11
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?