私はGitリポジトリを持っています、そして数ヶ月前にいくつかのファイルがどのように見えるかを見たいです。私はその日のリビジョンを見つけました、そしてそれは27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8
です。あるファイルがどのように見えるのかを確認し、それをファイルに保存する必要があります。
私はgitk
を使ってファイルを見ることができましたが、それを保存するオプションはありません。私はコマンドラインツールを試してみました。
git-show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8 my_file.txt
ただし、このコマンドはファイルの内容ではなく差分を表示します。後でPAGER=cat
のようなものを使用して出力をファイルにリダイレクトできることはわかっていますが、実際のファイルの内容に到達する方法がわかりません。
基本的に、 svn cat のようなものを探しています。
あなた自身の答えを完成させるために、構文は確かに
git show object
git show $REV:$FILE
git show somebranch:from/the/root/myfile.txt
git show HEAD^^^:test/test.py
このコマンドは通常のリビジョンスタイルを取ります。つまり、次のいずれかを使用できます。
ヒント "git show
"を使用するときは、 常にリポジトリのルートからのパスを指定してください で、現在のディレクトリ位置ではありません。
( Mike Morearty は、少なくともgit 1.7.5.4では、パスの先頭に "./
"を入れることで相対パスを指定できることに言及していますが、例えば:
git show HEAD^^:./test.py
)
Git1.5.x以前では、これはいくつかの配管で行われました。
git ls-tree <rev>
コミット内の1つ以上の「BLOB」オブジェクトのリストを表示します
git cat-file blob <file-SHA1>
特定のリビジョン内でコミットされたファイルをcatします(svn catと同様)。 git ls-treeを使って与えられたfile-sha1の値を取得する
git cat-file -p $(git-ls-tree $REV $file | cut -d " " -f 3 | cut -f 1)::
git-ls-treeはリビジョン$ REVで$ fileのオブジェクトIDを一覧表示します。これは出力から切り出され、git-cat-fileの引数として使われます。これは実際にはgit-cat-objectと呼ばれるべきです。そのオブジェクトは標準出力になります。
注:Git 2.11(2016年第4四半期)以降、git cat-file
出力にコンテンツフィルタを適用できます。
commit 3214594 、 commit 7bcf341 (2016年9月9日)、 commit 7bcf341 (09 Sep 2016)、および commit b9e62f6 、 commit 16dcc29 (24 Aug 2016) ヨハネスシンデリン(dscho
) 。
( Junio C Hamano - gitster
- in commit 7889ed2 、2016年9月21日にマージ)
cat-file
:バッチモードで--textconv
/--filters
をサポート「
git hash-objects
」はファイルシステム上のデータストリームを取得し、それをGitオブジェクトストアに入れるためのツールですが、「外部からGitへの」変換を実行することはできます(例:end-of)クリーンなフィルタのオンライン変換と適用)、そしてそれは非常に初期の頃からデフォルトで機能を持っていました、その逆の操作 "git cat-file
"、それはGitオブジェクトストアからオブジェクトを取り、消費のために外部化外の世界では、「Git-to-outside-world」を実行するための同等のメカニズムが欠けていました。
git config diff.txt.textconv "tr A-Za-z N-ZA-Mn-za-m <"
git cat-file --textconv --batch
注: "git cat-file --textconv
"は最近Sefafaulting(2017)を開始しました。これはGit 2.15(2017年第4四半期)で修正されました。
コミットcc0ea7c (2017年9月21日)/ Jeff King(peff
) を参照。
( Junio C Hamano - gitster
- in commit bfbc2fc 、2017年9月28日にマージ)
現在のブランチのファイルの内容を前回のコミットまたは別のブランチのファイルの内容で置換/上書きしたい場合は、次のコマンドを使用して実行できます。
git checkout 08618129e66127921fbfcbc205a06153c92622fe path/to/file.txt
または
git checkout mybranchname path/to/file.txt
その後、それらが現在のブランチで有効になるように、それらの変更をコミットする必要があります。
ファイルへのフルパスを入力する必要があります。
git show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8:full/repo/path/to/my_file.txt
最も簡単なの方法は次のように書くことです。
git show HASH:file/path/name.ext > some_new_name.ext
ここで、
git show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8:my_file.txt > my_file.txt.OLD
これは、リビジョン27cf8eのmy_file.txtをmy_file.txt.OLDという名前の新しいファイルとして保存します。
Git 2.4.5でテストされました。
あなたが削除された検索ファイルを使いたいのなら、HASH~1
を使うことができます(指定されたHASHの前に1コミット)。
例:
git show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8~1:deleted_file.txt > deleted_file.txt
Windowsでは、Git Bashを使って:
git show cab485c83b53d56846eb883babaaf4dff2f2cc46:./your_file.ext > old.ext
そしてそれをファイルにうまくダンプするために(少なくともWindows上で) - Git Bash:
$ echo "`git show 60d8bdfc:src/services/LocationMonitor.Java`" >> LM_60d8bdfc.Java
改行を保持するために"
の引用符が必要です。
これは、パスを指定せずにコミット間にすべての削除済みファイルを取得するのに役立ちます。削除済みファイルが多数ある場合に役立ちます。
git diff --name-only --diff-filter=D $commit~1 $commit | xargs git checkout $commit~1