Git ShelveとStash


275

私はshelveGit の側面に非常に慣れていません。stash未完成の仕事を片付けるために使用されている場合shelve、それでは何ですか?何に使うの?

たとえば、プロジェクトの更新(VCSメニューから)

ここに画像の説明を入力してください

1つが得られます(アイデア2019.2)

ここに画像の説明を入力してください


14
shelvegitコマンドではありません。この質問の背景は何ですか、これらの用語はどこから来ていますか?shelve他のいくつかのツールに存在しますが、それはgitの一部ではありません。
ジョナ

2
Git stashはshelvebzrやhgなどと似ています。git相互運用パッケージを参照していますか?
drRobertz

3
受け入れ答えよりも多くのupvotesおそらく確認、この質問は有効であり、用語「」シェルブは、」均等にgitのコマンドとして誤解されて尋ねてくれてありがとう、これはあまりにも(IDEAからあまりにも)私の疑問だった。。
PravyNandas

回答:


266

git shelve Gitには存在しません。

のみgit stash

  • 作業ディレクトリとインデックスの現在の状態を記録したいが、クリーンな作業ディレクトリに戻りたい場合。
  • ローカルの変更を保存し、作業ディレクトリをHEADコミットに一致するように戻します。

ブランチの変更を分離するための2008年の古いプロジェクトgit shelveがありましたが、今日ではそれはあまり役に立ちません。

Intellij IDEAシェルフダイアログに記載されているように、「シェルビングおよびアンシェルビング」機能はVCS(バージョン管理システムツール)ではなくIDE自体にリンクされており、変更リストにまだコミットしていない保留中の変更を一時的に保存します。

ことに注意してくださいGitの2.13(Q2 2017年)以来、あなたは今、あまりにも個々のファイルを隠しておくことができます


73
私はその概念を誤解していることがわかりました。IntelliJ IDEAのサードパーティ製のGitコマンドだと思いました。gitドキュメントが見つからなかったので、何か不足していると思いました。jetbrains.com/idea/help/shelving-and-unshelving-changes.html
Edgar Martinez

2
ドキュメントリンクは、「シェルフ」がIntelliJ IDEのみによって管理される一連の変更(パッチ)であり、Gitによって管理される標準的なものである「スタッシュ」のリンクを解除することを示しています。だから棚を避けてください。
barbara.post 2015

2
あなたの場合、@ jerryあご棚は隠しておくよりも優れています。棚に棚があったらいいのに。WebstormはRAMを吸い出します。gitがそれをcmd行で実行できるとしたら
便利です

2
stashがstashで対応していないという一般的な使用例があります-問題のある同僚/会社の慣行に対処することです。完全なガベージがリポジトリに追加され、誰かの狂気のためにそれを「修正」することができなくなる可能性があります。代わりのようなものですgit stash && <your actual command> && git stash popが、それはひどいです。自動棚上げと適用は、必要なものにより近くなります。
smaudet 2018

1
@VonCは同じではありません-私が使用しているプロジェクトに、「標準ではない」ためコミットできない必要な設定があるユースケースがあります。また、ローカル開発とdev / test / prodでビルドファイルを変更する必要があるなど、私が遭遇した他のユースケースの6ダース。
smaudet 2018

187

JetBrains IDEをGitで使用する場合、「シェルフとアンシェルフに加えて、スタッシュとアンスタッシュのアクションがサポートされます。これらの機能には多くの共通点があります。主な違いはパッチの生成方法と適用方法にあります。Shelveは個々のファイルまたは束で操作できますStashは一度に変更されたファイルの束全体でしか動作しませんが、これらの違いの詳細を次に示します。」


10
shelvegit stashよりも柔軟性があるようです。
Dmitry Davydov 2016

12
@DmitryDavydov git stash -p両方が切り札です。残念ながら、コマンドラインでのみ。
Vee

1
@TheVeeはい、機能の点でシェルフに非常に似ています。情報をありがとうございます。
Dmitry Davydov 2016年

10
実際、Git 2.13(2017年第2四半期)以降、 個々のファイルを隠して
おく

5
私が見つかりました棚は、あなたがautoにしたい例えばドキュメントを生成するたびに適用したいというあなたは、変更のパッチを持っているときに非常に便利。Shelveは.idea / shelve内にファイルを作成し、VCSに追加してすべてのチームと共有できるため、チームはそれらの変更を適用して同じタスクを実行できます。
ingkevin 2018

63

以前の回答に加えて、私にとって重要なことが1つあります。

shelveJetBrainsの製品の機能は、(などでWebStormPhpStormPyCharm、など)。保留されたファイルを.idea/shelfディレクトリに配置します。

stashgitオプションの1つです。それは隠されたファイルを.gitディレクトリの下に置きます。


2
この重要な質問を明確にしていただきありがとうございます。
AmerllicA

4

他の場所で自分の変更を共有しない場合は、変更を隠しておくのではなく、棚に置きたいと思います。

スタッシングはgit機能であり、特定のファイルを選択したり、ファイル内の変更を行ったりすることはできません。シェルビングはそれを行うことができますが、これはIDE固有の機能であり、git機能ではありません。

ここに画像の説明を入力してください

ご覧のとおり、棚に含めるファイル/行を指定することができます。隠しておくことはできません。

IDEでシェルフを使用すると、変更が.gitフォルダーに保存されないため、パッチの移植性が制限される可能性があることに注意してください。

いくつかの役立つリンク:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.