アプリケーションシナリオ:
1. dev ブランチでプロジェクトを開発しているときに、プロジェクトにバグが発生し、緊急に修正する必要があるが、開発中のコンテンツは半分しか完成していないため、まだ提出したくない場合、この時点では、 git stash コマンドを使用して、変更されたコンテンツをスタック領域に保存し、バグ修復のために他のブランチにスムーズに切り替えることができます。修復が完了したら、再び dev ブランチに切り替えて、保存したばかりのコンテンツをスタック。
2 過失により、dev ブランチで開発されるべきコンテンツがマスターで開発されてしまいました。開発のために dev ブランチに戻す必要があります。コンテンツをスタックに保存するには、git stash を使用できます。 dev ブランチに戻り、コンテンツを再度復元するだけです。
3. 最新のコードをプルしたいが、現時点ではコミット レコードを再追加したくない場合は、最初に git stash、次に pull、最後に git stash Pop を実行します。一般的に、git stash の機能
はコマンドは、まだコミットしたくないが既にコミットしているコミット レコードを追加することです。変更された内容はスタックに保存され、スタック内の内容は後で特定のブランチに復元できます。これは、stash 内のコンテンツを最初に開発されたブランチに復元できるだけでなく、他の指定されたブランチにも復元でき、ブランチをまたがることができることを意味します。git stash のスコープには、ワークスペースとステージング領域のコンテンツが含まれます。つまり、コミットされていないコンテンツはすべてスタックに保存されます。
コマンドの詳細な説明
1 git stash [重要]
コミットされていないすべての変更 (作業領域およびステージング領域) をスタックに保存し、後で現在の作業ディレクトリを復元することができます。
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: src/main/java/com/wy/CacheTest.java
modified: src/main/java/com/wy/StringTest.java
no changes added to commit (use "git add" and/or "git commit -a")
$ git stash
Saved working directory and index state WIP on master: b2f489c second
$ git status
On branch master
nothing to commit, working tree clean
2 git stash save の機能は
git stash と同等ですが、次のようにコメントを追加できる点が異なります:
git stash save "test1" の効果:
stash@{0}: マスター上: test1
3 git stash list
で現在の stash の内容を表示します
4 git stash Pop [重要]
現在の stash の内容をポップし、現在のブランチに対応する作業ディレクトリに適用します。
注: このコマンドは、スタック内に最近保存されたコンテンツを削除し (スタックは先入れ、後出し)、
git stash save "test1" および git stash save "test2" コマンドを順番に実行します。その効果は次のとおりです。
$ git stash list
stash@{
0}: On master: test2
stash@{
1}: On master: test1
$ git stash pop
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: src/main/java/com/wy/StringTest.java
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{
0} (afc530377eacd4e80552d7ab1dad7234edf0145d)
$ git stash list
stash@{
0}: On master: test1
test2 の stash が最初に飛び出していることがわかります。ステップバイステップのスタッシュがない場合、すべてのファイルが同時に出入りします。
スタッシュから回復されたコンテンツが現在のディレクトリのコンテンツと競合する場合、つまり、回復されたコンテンツと現在のディレクトリが同じ行のデータを変更する場合、エラーが表示され、競合を解決する必要があります。新しいブランチを作成して競合を解決します。
5 git stash apply は
、スタックの内容を現在のディレクトリに適用します。git stash Pop とは異なり、このコマンドはスタックから内容を削除しません。つまり、このコマンドはスタックの内容を作業ディレクトリに複数回適用できます。 、適応 複数分岐の場合
$ git stash apply
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: src/main/java/com/wy/StringTest.java
no changes added to commit (use "git add" and/or "git commit -a")
$ git stash list
stash@{
0}: On master: test2
stash@{
1}: On master: test1
スタックの内容は削除されません。
git stash apply + stash name (stash@{1} など) を使用して、現在の作業ディレクトリに復元する stash を指定できます。
6 git stash drop + name を使用して
、指定した stash をスタックから削除できます。
7 git stash clear は
スタック内のすべてをクリアします
8 git stash show を実行すると、
スタックに保存された最新の stash と現在のディレクトリの違いが表示されます。
9 git stash Branch は、
最新の stash からブランチを作成します。
アプリケーション シナリオ: 作業の一部が保存されている場合、当面はそれを無視し、現在のブランチで開発を続行します。後で、スタッシュ内のコンテンツを現在の作業ディレクトリに復元する場合 (同じディレクトリへの変更である場合)ファイル (ピア データでない場合でも) を作成すると、競合が発生してリカバリが失敗する可能性がありますが、これは新しいブランチを作成することで解決されます。stash 内のコンテンツと現在のディレクトリ内のコンテンツ間の競合を解決するために使用できます。
競合が発生した場合は、手動で解決する必要があります。
その他:
デフォルトでは、git stash は次のファイルをキャッシュします。
- ステージング領域に追加された変更 (段階的変更)
- Git によって追跡されるが、ステージング領域には追加されない変更 (ステージングされていない変更)
ただし、ファイルはキャッシュされません。
- 作業ディレクトリ内の新しいファイル (追跡されていないファイル)
- 無視されるファイル (無視されるファイル) は、
git バージョン管理に含まれておらず、git stash で保存できないファイルです。したがって、stash を直接実行すると、新しく追加されたファイルは保存されません。このとき、最初に git add を実行して git バージョン管理に追加し、次に git stash を実行する必要があります。
参考リンク:
1. https://blog.csdn.net/stone_yw/article/details/80795669