1. ホーム
  2. git

[解決済み] git stash から単一のファイル(またはファイルへの変更点)を抽出するにはどうすればよいですか?

2022-03-20 22:29:21

質問

git stash から単一のファイルまたはファイルの diff を、stash のチェンジセットをポップオフすることなく抽出することは可能ですか?

どのように解決するのですか?

について ギットスタッシュ という記述があります("Discussion" のセクション、"Options" の説明のすぐ後)。

<ブロッククオート

スタッシュはコミットとして表現され、そのツリーにはそのコミットの状態が記録されます。 作業ディレクトリを指し、その最初の親は、その作業ディレクトリの が作成されました。

そのため、stashを扱うことができます(例. stash@{0} をマージコミットとして使用します。

$ git diff stash@{0}^1 stash@{0} -- <filename>

説明する。 stash@{0}^1 は、与えられた隠し場所の最初の親を意味し、上の説明で述べたように、変更が隠し場所となったコミットを意味します。この形式の "git diff" (ふたつのコミットを含む) を使用するのは、次の理由からです。 stash@{0} / refs/stash はマージコミットであり、どの親に対して diff を取得したいのかを git に伝えなければなりません。より暗号化されています。

$ git diff stash@{0}^! -- <filename>

も動作するはずです ( git rev-parse の説明のためにmanpageを参照してください。 rev^! の構文、quot;範囲の指定"のセクションで説明)。

同様に ジットチェックアウト を使用して、隠し場所から1つのファイルをチェックします。

$ git checkout stash@{0} -- <filename>

または別のファイル名で保存します。

$ git show stash@{0}:<full filename>  >  <newfile>

または

$ git show stash@{0}:./<relative filename> > <newfile>

( 書簡 ここで、 <full filename> は、プロジェクトのトップディレクトリからの相対的なファイルのフルパス名であること(例えば、"secret "ディレクトリからの相対パス名)。 stash@{0} )).


を保護する必要があるかもしれません。 stash@{0} をシェル展開で使用します。 "stash@{0}" または 'stash@{0}' .