1. テスト シナリオ 1:
ここで、index.html ページを変更し、index.html ページを一時的に保存してから、インデックスの変更を続けます。 .html ページを開き、次に git stash を実行します。今回はコード ウェアハウスがクリーンになり、変更が一時的に保存され、その後 git stash Pop を実行して変更を復元します。この時点で、ワークスペース内の変更が復元されていることがわかります。ただし、ステージング領域での変更は失われます。 つまり、git status は変更がステージングされていないことを検出し、以前にステージングされた変更は破棄されましたが、ワークスペース内の変更は完全に保持されました。
2. テスト シナリオ 2:
ここで、test01.html ページを追加します。git status は、test01.html が git によって追跡されていないことを示し、この時点で、index.html ファイルを変更します。 Index.html ファイルは一時保存されますが、test01.html ファイルは一時保存されません。 つまり、git status は、git によって追跡されないファイルを一時的に保存しません。
3. シナリオ 3 をテストします。
シナリオ 2 を継続し、index.html ファイルを変更し、test01.html ファイルを新しいファイルとして追加します。この時点で、test01.html ファイルを git add します。 html は git、次に git stash によって追跡されます。test01.html ファイルが git stash show メソッド、次に git stash Pop によって一時的に保存され、変更が復元されることがわかります。 status により、test01.html ファイルが一時的な状態にあり、index.html が依然としてワークスペースの変更として保持されていることがわかりました。 つまり、git add は、これまで git によって追跡されていなかったファイルを git stash の後、一時的に保存され、git stash pop の後、新しく追加されたファイルはまだ一時的な状態になります。シナリオ 1、インデックス .html ファイルでは、ワークスペース内の変更のみが一時的に保存され、一時記憶領域内の変更は失われます。
4. シナリオ 4 をテストします。
シナリオ 3 を継続し、index.html ファイルを変更し、test01.html ファイルを新しいファイルとして追加します。この時点で、test01.html ファイルを git 追加します。 html を git で追跡し、test01.html ファイルを変更して、git stash、git stash Pop を実行すると、test01.html はまだ一時的な状態ですが、一時的に保存されたファイルの内容が最終的に変更された内容であることがわかります。ワークスペース。 つまり、以前に git で追跡されていないファイルを git add し、そのファイルを変更すると、git stash の後、そのファイルは一時的に保存され、git stash Pop の後も、新しく追加されたファイルが残ります。一時的な状態ですが、一時的に保存された変更内容は、追加による一時的な変更内容ではなく、前のワークスペースの変更内容になります。
上記のテストでは、git stash の動作パターンが見つからず、非常に混乱していました。git の専門家に指導と分析をしていただければ幸いです。
曾经蜡笔没有小新2017-05-02 09:46:35
まず最初に、git stash
コマンドの基本的な機能を説明します。作業ディレクトリのダーティ ステータス、つまり、git stash
命令的基本功能:处理工作目录脏的状态,即修改的跟踪文件与暂存改动,然后将未完成的修改保存到一个栈上。知道了这些之后,我们来看看我总结的几个要点:
git stash
命令会将已跟踪的文件压入栈中,而未被跟踪的文件不会被压入栈中,正如楼主的实验2中所描述的。
如果之前的工作有被添加到暂存区,git stash
命令默认不会将弹出栈的那个修改再加入暂存区,正如楼主的实验1所描述的那样,但是楼主的描述其实有误,之前暂存的修改并不是被废弃或丢失而是保留在工作区,只是未加入暂存区而已。
对于楼主的实验2、3中的新添加文件test01.html,其实这算一种特殊情况吧。我们可以这样理解:stash pop
的结果就是还原以前的修改,而它对于test01.html所能做的恢复操作也只能是重新加入暂存区,否则的话,test01.html将回到未被跟踪的状态。
如果想要重新应用之前暂存的修改,可以在git stash pop
后加上--index
选项,这样的话就可以恢复到和之前一模一样了,即之前暂存过的现在也会是暂存状态,为暂存的仍是未暂存的状态。
最后,我需要声明下楼主所说的:
之前暂存的修改被废弃了
或者
暂存区的修改被丢失
其实描述有误,或者不该这样描述,因为这样会使我们误解——我们可能会误认为,而实际情况应该是这样的:git stash
只会暂存工作区的修改git stash
変更された追跡ファイル と 一時的な変更
を処理します。そして、 未完成の変更をスタックに保存します。これを理解した上で、私がまとめたいくつかの重要なポイントを見てみましょう:
git stash
コマンドは追跡されたファイルをスタックにプッシュしますが、追跡されていないファイルはスタックにプッシュされません。 🎜git stash
コマンドは、スタックからポップアウトした変更をデフォルトでステージング領域に追加しません。投稿者の実験1 そうですが、実は投稿者の説明は間違っています。以前に一時的に保存された変更は破棄されたり失われたのではなく、作業領域に残りましたが、一時保存領域には追加されませんでした。 🎜stash Pop
の結果は、以前の変更を復元することであり、test01.html に対して実行できる回復操作は、ステージング領域に再結合することだけです。それ以外の場合は、test01 です。 html は追跡されていない状態に戻ります。 🎜git stash Pop
の後に --index
オプションを追加します。以前とまったく同じです。つまり、以前に一時的に保存されたものは一時的な状態になり、一時的に保存されたものは非一時的な状態のままになります。 🎜🎜以前に保存された変更は破棄されました🎜🎜または🎜
🎜一時記憶域内の変更が失われました🎜🎜実際、この説明は間違っているか、このように説明すべきではありません。誤解を招くからです。
git stash
は変更を一時的に保存するだけであると誤解する可能性があります。ワークスペースgit stash
はデフォルトで復元された操作をワークスペースに保持しますが、🎜 はそれを自動的に再スタッシュしません🎜。 🎜投稿者は私の発言を検証するために上記の実験をやり直すことができます。 🎜