git stashの変更は新しいブランチに適用されますか?


347

私はマスターブランチで作業していて、いくつかの変更を加えてから、それらを隠しました。現在、私の主人はHEADにいます。

しかし、今、これらの変更を取得したいのですが、マスターブランチのHEADバージョンからブランチする新しいブランチに変更します。

どうすればよいですか?


3
あなたはこれを探していると思いますか?stackoverflow.com/questions/556923/...
zx1986

回答:


502

標準的な手順は機能していませんか?

  • 変更を加える
  • git stash save
  • git branch xxx HEAD
  • git checkout xxx
  • git stash pop

より短い:

  • 変更を加える
  • git stash
  • git checkout -b xxx
  • git stash pop

8
@sfletche stashに名前を付ける場合は、git stash save <name>を実行する必要があります。それ以外の場合、あなたが言うように、それはgit stashと同じです。
SgtPooki 2014年

5
このアプローチを使用した後、前のブランチに戻ると、隠された変更が返されているようです。新しいブランチで隠された変更のみを持つことは可能ですか?
Thomas Higginbotham 2014

変更を新しいブランチにコミットするだけです。
ChrisR

2
@ThomasHigginbothamいいえ、作業ディレクトリはブランチ間で共通であり、あるブランチから別のブランチに渡すときに、別のブランチにコピーされます。あなたが望むものを「達成する」ために、私は通常、さまざまな隠し場所を作り、git stash save "description"前述のコマンドで有用な説明を追加します。そして私git clearは(実際の作業ディレクトリをゴミ箱にgit stash apply stash@{my_desired_stash}入れるためgit checkout <branch>に)ブランチを作成し、次に目的のブランチに(明らかにそれに切り替えた後)私はそれが実際の解決策ではないことを知っていますが、あなたがgitでできる最善の方法です。
カマフェザー

私はまたgit stash drop、私がコミットしたときにこれを確定しました
奇数計

221

すでに変更を隠してあるので、必要なのはこの1行だけです。

  • git stash branch <branchname> [<stash>]

ドキュメントから(https://www.kernel.org/pub/software/scm/git/docs/git-stash.html):

作成し、<という名前の新しいブランチをチェックアウトbranchname <これでコミットから始まる> スタッシュ >最初に作成された、<に記録された変更適用スタッシュ新しいワーキングツリーとインデックスに>を。それが成功し、< stash >がstash @ {< revision >} 形式の参照である場合、< stash >をドロップします。< 隠していない場合 >が指定されていは、最新のものを適用します。

これは、git stash saveを実行したブランチが変更され、競合のためにgit stashの適用が失敗した場合に役立ちます。stashはgit stashが実行されたときにHEADであったコミットの上に適用されるため、競合が発生することなく、元のstash状態が復元されます。


3
シングルスタッシュの場合、これが方法です。Gitは最新のstashを適用し、新しいブランチに切り替えて、1つのコマンドでstashを適用するため、stashの名前参照は必要ありません。
sinisterOrange 2014

@RodneyGolpeこれはスタッシュを「マスター」にも適用するようですか?私がしたいのは、「master」からgit stashです。「git stash branch [branchname]」がstashを新しいブランチに適用し、マスターを編集せずに残しておくことを期待していましたか?
David Doria、2016年

2
@DavidDoriaマスターに戻る前に、新しいブランチへの変更をコミットする必要があります。
Rodney Golpe、2016年

これで変更もマスターにコミットされました...私は本当に途方に暮れています...明らかに私はまだgitを本当に理解していません。マスターをソフトリセットし、リモートリポジトリからプルした後、私はなりたい場所にいます。マスターは変更前の状態です。新しいブランチは変更を保持します。
Ekkstein

1

ワークスペースに変更があり、それらを新しいブランチに隠したい場合は、次のコマンドを使用します。

git stash branch branchName

それは作ります:

  1. 新しい支店
  2. このブランチに変更を移動する
  3. そして、最新のスタッシュを削除します(同様:git stash pop)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.