[解決済み] Gitで特定のリビジョンから単一のファイルを取得する方法とは?
質問
Git リポジトリを持っていて、あるファイルが数ヶ月前にどうなっていたかを見たいと思っています。その日のリビジョンを見つけました。
27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8
. 私は1つのファイルがどのように見えるかを見る必要があり、またそれを("new")ファイルとして保存する必要があります。
を使って、なんとかファイルを見ることができました。
gitk
しかし、それを保存するオプションがありません。コマンドラインツールで試したところ、最も近いものができました。
git-show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8 my_file.txt
しかし、このコマンドはdiffを表示し、ファイルの中身を表示しません。後で、次のようなものを使うことができるのは知っています。
PAGER=cat
を作成し、出力をファイルにリダイレクトすることはできますが、実際のファイルの内容を取得する方法がわかりません。
基本的には、次のようなものを探しています。 svn cat .
解決方法は?
使用方法
git show
自分の答えを完成させるために、構文は確かに
git show object
git show $REV:$FILE
git show somebranch:from/the/root/myfile.txt
git show HEAD^^^:test/test.py
このコマンドは通常のリビジョンのスタイルを取ります。つまり、以下のどれでも使うことができます。
チップ
を使うときに覚えておきたいのは、"
git show
"です。
常にリポジトリのルートからのパスを指定します。
現在のディレクトリの位置ではありません。
(ただし
マイク・モリアーティ
は、少なくとも git 1.7.5.4 では、" を置くことで相対パスを指定できることを述べています。
./
パスの先頭に "を付けてください。例えば
git show HEAD^^:./test.py
)
使用方法
git restore
Git 2.23+ (2019年8月) では、さらに
git restore
を置き換えたものです。
という紛らわしい
git checkout
コマンド
git restore -s <SHA1> -- afile
git restore -s somebranch -- afile
この場合、作業ツリーには
"ソース" (
-s
)
コミットSHA1またはブランチ
somebranch
.
インデックスも復元する場合。
git restore -s <SHA1> -SW -- afile
(
-SW
の略です。
--staged --worktree
)
で述べたように コメント によって スターウォーズウィー
<ブロッククオートこれは、内容をファイルにパイプすることができるので、コミットからファイルをすばやく比較したい場合に最適です。
例)こんなことができます。
git show 1234:path/to/file.txt > new.txt
git show 1234~:path/to/file.txt > old.txt
で、それらを比較します。
低レベルのgit plumbingコマンドを使用する
git1.5.x以前は、いくつかの配管を使用してこれを行いました。
git ls-tree <rev>
コミット内の 1 つまたは複数の 'blob' オブジェクトのリストを表示します。
git cat-file blob <file-SHA1>
特定のリビジョンにコミットされたファイルを cat します(svn の
cat)を使用します。
使用
git ls-tree
を指定すると、指定したファイル-sha1 の値を取得することができます。
git cat-file -p $(git-ls-tree $REV $file | cut -d " " -f 3 | cut -f 1)::
git-ls-tree
のオブジェクト ID をリストアップします。
$file
リビジョン
$REV
の引数として使用されます。
git-cat-file
という名前であるべきですが、実際には
git-cat-object
にダンプし、そのオブジェクトを
stdout
.
注:Git 2.11(2016年第4四半期)以降、コンテンツフィルターを適用して
git cat-file
を出力します。
参照
コミット 3214594
,
コミット 7bcf341
(2016年09月09日)をご参照ください。
コミット 7bcf341
(2016年09月09日)、および
コミットb9e62f6
,
コミット 16dcc29
(2016年8月24日)によるものです。
ヨハネス・シンデリン(
dscho
)
.
(によって統合されました。
ジュニオ・C・ハマノ--。
gitster
--
で
コミット7889ed2
, 2016年9月21日)
git config diff.txt.textconv "tr A-Za-z N-ZA-Mn-za-m <"
git cat-file --textconv --batch
注:"です。
git cat-file --textconv
"が最近(2017年)セグフォールトを起こすようになりましたが、Git 2.15(2017年第4四半期)で修正されました。
参照
コミット cc0ea7c
(2017年9月21日)によるものです。
ジェフ・キング (
peff
)
.
(によって統合されました。
ジュニオ・C・ハマノ--。
gitster
--
で
コミットbfbc2fc
, 2017年9月28日)
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git が追跡したファイルを .gitignore に登録したまま「忘れる」ようにするにはどうしたらいいですか?
-
[解決済み] ファイルをリセットしたり、特定のリビジョンに戻したりするにはどうすればよいですか?
-
[解決済み] Git リポジトリを特定のフォルダにクローンする方法は?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ローカルにない作業がリモートに含まれているため、アップデートが拒否された
-
[解決済み】git revert <hash> not allowed due to a merge but no -m option was given.
-
[解決済み】GitHub: クローンには成功したが、チェックアウトに失敗した
-
[解決済み】GitHubで空のブランチを作成する
-
git revert + git rebase 一度に複数のコミット_本然233的博客程式员息信网_git revert Multiple
-
[解決済み】ローカルGitブランチとそのリモートブランチを比較する方法
-
[解決済み] VSTS Git Fetch Failed with exit code: 128
-
[解決済み] Git エラー : 'upstream' は git リポジトリでないようです。
-
[解決済み] ブランチを変更せずに別の Git ブランチにあるファイルを表示する
-
[解決済み】別のブランチから1つのファイルだけを取得する方法は?