これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド git-stash です。
プログラム:
NAME
git-stash - 変更をダーティな作業ディレクトリに隠します
SYNOPSIS
git 隠れる リスト [ 】
git 隠れる 見せる [ 】
git 隠れる ドロップ [-q|--静か] [ 】
git 隠れる ( ポップ | 適用 ) [--index] [-q|--quiet] [ 】
git 隠れる 支店[ 】
git 隠れる [保存 [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
[-u|--include-untracked] [-a|--all] [ ]]
git 隠れる クリア
git 隠れる 作成する [ ]
git 隠れる ストア [-m|--メッセージ] [-q|--静か]
DESCRIPTION
作業ディレクトリと
インデックスを削除しましたが、クリーンな作業ディレクトリに戻りたいと考えています。 このコマンドはローカルに保存します
変更を取り除き、HEAD コミットと一致するように作業ディレクトリを元に戻します。
このコマンドによって隠された変更は、 git stash list を使用して一覧表示できます。
git stash show で検査され、復元されます (別のコミットの上にある可能性があります)。
git stash を適用します。 引数なしで git stash を呼び出すことは、git stash と同等です。
保存。 スタッシュはデフォルトで「WIP on」としてリストされます。 支店名 ..." しかし、さらに与えることができます
作成時にコマンドラインに説明メッセージを表示します。
作成した最新のスタッシュは refs/stash に保存されます。 古い隠し場所は次の場所にあります。
この参照の reflog であり、通常の reflog 構文を使用して名前を付けることができます (例: stash@{0} は
最後に作成されたスタッシュ、stash@{1} はその前のスタッシュ、stash@{2.hours.ago} は
も可能です)。
OPTIONS
保存 [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet]
[ 】
ローカルでの変更を新しいファイルに保存します 隠れるを実行し、 git replace --hard を実行して元に戻します。
のこの部分はオプションであり、隠された状態とともに説明が表示されます。
スナップショットをすばやく作成するには、省略できます 両言語で 「保存」と、ただし与えるだけ
サブコマンドのスペルミスを防ぐために、このアクションはトリガーされません。
不要な隠し場所。
--keep-index オプションを使用すると、すでにインデックスに追加されている変更はすべて残ります。
そのまま。
--include-untracked オプションを使用すると、すべての追跡されていないファイルも保管され、
その後 git clean でクリーンアップすると、作業ディレクトリは非常にクリーンな状態になります。
代わりに --all オプションが使用される場合、無視されたファイルは隠蔽され、クリーンアップされます。
追跡されていないファイルに加えて。
--patch を使用すると、HEAD と
作業ツリーを隠します。 スタッシュ エントリは、インデックスの状態が次のように構築されます。
リポジトリのインデックス状態と同じであり、そのワークツリーには
インタラクティブに選択した変更を行います。 選択した変更はその後ロールバックされます。
あなたのワークツリー。 「インタラクティブ モード」セクションを参照してください。 git-追加(1) 方法を学ぶ
--patch モードを操作します。
--patch オプションは --keep-index を意味します。 --no-keep-index を使用してこれをオーバーライドできます。
リスト [ 】
現在所有している隠し場所をリストします。 それぞれ 隠れる はその名前とともにリストされます (例:
stash@{0} は最新の stash、stash@{1} は以前の stash など)、名前
スタッシュが作成されたときに現在のブランチ、およびコミットの簡単な説明
隠し場所はに基づいていました。
stash@{0}: 送信時の WIP: 6ebd0e2... git-stash ドキュメントを更新
stash@{1}: マスター上: 9cc0589... git-stash を追加
このコマンドは、 git ログ 表示内容を制御するコマンド
そしてどうやって。 見る git-ログとします。
見せる [ 】
スタッシュに記録された変更を、スタッシュされた状態とその状態の差分として表示します。
元の親。 いいえの場合が与えられている場合は、最新のものを示します。 デフォルトでは、
コマンドは diffstat を表示しますが、既知のあらゆる形式を受け入れます。 git 差分 (例: git
stash show -p stash@{1} と XNUMX 番目に新しい stash をパッチ形式で表示します)。 あなたはできる
stash.showStat および/または stash.showPatch 構成変数を使用してデフォルトを変更します
行動。
ポップ [--index] [-q|--quiet] [ 】
単一の隠し状態を隠しリストから削除し、それを現在の状態の上に適用します。
作業ツリーの状態、つまり git stash save の逆の操作を実行します。 働くこと
ディレクトリはインデックスと一致する必要があります。
状態の適用は競合により失敗する可能性があります。 この場合、それは
隠し場所リスト。 競合を手動で解決し、手動で git stash Drop を呼び出す必要があります。
その後。
--index オプションを使用すると、作業ツリーだけでなく、
変更だけでなく、インデックスの変更も行われます。 ただし、競合がある場合、これは失敗する可能性があります
(これらはインデックスに保存されるため、変更をそのまま適用することはできなくなります)
元々はそうでした)。
いいえの場合が指定されている場合は stash@{0} が想定され、それ以外の場合は参考になるはずです
形式 stash@{ }。
apply [--index] [-q|--quiet] [ ]
ポップと似ていますが、スタッシュ リストから状態を削除しません。 ポップスとは違って、 多分
stash save または stash create によって作成されたコミットと同様のコミット。
支店[ 】
という名前の新しいブランチを作成してチェックアウトします。 のコミットから開始
それはが最初に作成され、に記録された変更が適用されます。 に
新しい作業ツリーとインデックス。 それが成功すれば、そしての参考資料です
フォームスタッシュ@{ } を削除すると、 。 いいえの場合与えられる、適用される
最新のもの。
これは、 git stash save を実行したブランチが十分に変更された場合に便利です。
git stash apply は競合により失敗します。 スタッシュは上に適用されるため、
git stash の実行時に HEAD だったコミットは、元の stash に復元されます。
矛盾のない状態。
クリア
すべての隠し状態を削除します。 これらの状態は枝刈りの対象となることに注意してください。
回復が不可能になる可能性があります (「 例 考えられる戦略については以下を参照してください)。
ドロップ [-q|--静か] [ 】
単一の隠し状態を隠しリストから削除します。 いいえの場合与えられる、それは
最新のものを削除します。 つまり stash@{0}、それ以外の場合有効なスタッシュ ログである必要があります
形式 stash@{ の参照}。
作ります
スタッシュ (通常のコミット オブジェクト) を作成し、そのオブジェクト名を返します。
それを ref 名前空間内の任意の場所に保存します。 これはスクリプトで役立つことを目的としています。
おそらく、これはあなたが使用したいコマンドではないでしょう。 上記の「保存」を参照してください。
店舗
経由で作成された特定のスタッシュを保存します git 隠れる 作ります (これはダングリングマージコミットです)
stash ref、stash reflog を更新します。 これはスクリプトで役立つことを目的としています。
おそらく、これはあなたが使用したいコマンドではないでしょう。 上記の「保存」を参照してください。
考察
スタッシュはコミットとして表され、そのツリーには作業ディレクトリの状態が記録されます。
その最初の親は、スタッシュが作成されたときの HEAD のコミットです。 の木
XNUMX 番目の親は、スタッシュが作成されたときのインデックスの状態を記録し、スタッシュが作成されます。
HEAD コミットの子。 祖先グラフは次のようになります。
.---W
/ /
- - -こんにちは
ここで、H は HEAD コミット、I はインデックスの状態を記録するコミット、W は
作業ツリーの状態を記録するコミット。
例
汚れた木に引き込む
何かの途中にいると、上流での変更があることがわかります
あなたがやっていることに関連している可能性があります。 ローカルの変更が反映されない場合
アップストリームの変更と競合する場合は、単純な git pull で移動できます。
前方に
ただし、ローカルの変更が上流の変更と競合する場合があります。
変更すると、git pull は変更の上書きを拒否します。 そんなときは隠しておくことができます
次のように変更を保存し、プルを実行してからアンスタッシュします。
$ git プル
...
ファイル foobar が最新ではないため、マージできません。
$ git スタッシュ
$ git プル
$ git stash ポップ
中断されたワークフロー
あなたが何かをしている最中に、上司がやって来て、修正するように要求する
すぐに何か。 従来は、一時ブランチにコミットして、
変更を保存し、元のブランチに戻って緊急修正を行います。
このような:
# ...ハックハックハック...
$ git チェックアウト -b my_wip
$ git commit -a -m "WIP"
$ git チェックアウト マスター
$ 緊急修正を編集
$ git commit -a -m "急いで修正する"
$ git チェックアウト my_wip
$ git restart --soft HEAD^
# ... ハッキングを続けます ...
あなたが使用することができます git 隠れる 上記を単純化すると次のようになります。
# ...ハックハックハック...
$ git スタッシュ
$ 緊急修正を編集
$ git commit -a -m "急いで修正する"
$ git stash ポップ
# ... ハッキングを続けます ...
部分的なコミットのテスト
XNUMX つ以上のコミットを作成したい場合は、 git stash save --keep-index を使用できます。
ワークツリー内の変更を確認し、コミットする前に各変更をテストしたいとします。
# ...ハックハックハック...
$ git add --patch foo # 最初の部分だけをインデックスに追加します
$ git stash save --keep-index # 他のすべての変更を stash に保存します
$ 最初の部分を編集/ビルド/テスト
$ git commit -m '最初の部分' # 完全にテストされた変更をコミット
$ git stash Pop # 他のすべての変更に取り組む準備をします
# ... コミットが XNUMX つ残るまで上記の XNUMX つの手順を繰り返します ...
$ 残りの部分を編集/ビルド/テスト
$ git commit foo -m '残りの部分'
誤ってクリア/ドロップされたスタッシュの回復
隠し場所を誤って落としたり消去したりした場合、通常の操作では回復できません。
安全機構。 ただし、次の呪文を試してリストを取得することができます。
まだリポジトリ内にあるものの、もうアクセスできない隠し場所:
git fsck --到達不能 |
grepコミット | カット -d\ -f3 |
xargs git log --merges --no-walk --grep=WIP
onworks.net サービスを使用してオンラインで git-stash を使用する