1. ホーム
  2. git

[解決済み] gitで、stashを適用せずに、追跡されていないstashedファイルを表示する方法はありますか?

2022-07-19 15:10:35

質問

もし私が git stash -u を実行すると、未追跡のファイルを隠しておくことができます。 しかし、その未追跡のファイルは git stash show stash@{0} . 隠し場所を適用せずに、追跡されていない隠しファイルを表示する方法はありますか?

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

未追跡のファイルは、stash commit の 3 番目の親に格納されます。(これは実際に文書化されているわけではありませんが、かなり明白なこととして u 機能を導入したコミット、787513... というコミット、そして の残りのドキュメントは git-stash フレーズを使うか...あるいは、単に git log --graph 'stash@{0}' )

を介して、隠し場所の "untracked" 部分のみを表示することができます。

git show 'stash@{0}^3'

または、単に "untracked" ツリーそのものを経由します。

git show 'stash@{0}^3:'

または、ツリー内の特定の "untracked" ファイルを、経由して。

git show 'stash@{0}^3:<path/to/file>'

残念ながら、すべてのstaged+unstaged+untrackedと"current"の状態の違いの概要を得る良い方法はありません。 git show 'stash@{0}' は、未追跡のファイルを含むようにすることはできません。これは、スタッシュコミット自体のツリーオブジェクトである stash@{0}: と呼ばれるスタッシュコミット自体のツリーオブジェクトには、3番目の親である "unstaged" からの変更が一切含まれないからです。

追跡されたファイルはパッチとして簡単に適用できますが、追跡されていないファイルは理論上、ファイル全体としてのみ適用できます。