git stashを共有するにはどうすればよいですか?


32

gitでスタッシュを共有する方法はありますか?

私は多くのマシンで作業しており、現在の作業状態をあるマシンから別のマシンに移行したいことがよくあります。

あるクローンから別のクローンにスタッシュをプッシュ/プルし、他のクローンのスタッシュとして、または見かけのリモートブランチとして表示できるようにする方法を探しています。ただし、リモートに既に独自のスタッシュがある場合、前者が必ずしも機能するとは考えていません。

スタッシュが実際には既に(明らかに)コミットされているブランチであることを考えると、「各スタッシュをブランチにコミットしてから共有する」という行に沿ったソリューションを探しているわけではありません。多くの枝。したがって、プッシュ/プルの制御に使用できるrefspecなどを探しています。

回答:


26

スタッシュは、stashまたはrefs/stashであり、リモートブランチにプッシュできます。

git push origin stash@{2}:refs/heads/otherstash

refs/stashただし、Gitはに直接プッシュすることを拒否します。また、全体のプッシュする方法があるようには思えないreflogs前のスタッシュが格納されています、。


6
git push origin $(for sha in $(git rev-list -g stash); do echo $sha:refs/heads/stash_$sha; done)すべての隠し場所でうまく動作するはずです。stackoverflow.com/a/5248758/85371
-sehe

11

あまり統合されてgit pushいませんが、ブランチの作成を避けるために、git stash show -p > change.patch(変更を隠してgit diff --cached > change.patchから)使用するかgit apply change.patch、作業する次のマシンでパッチを作成します。

少なくともこのソリューションでは、現在の作業状態で多くのファイルが変更された場合、すべてが単一のデータユニットに含まれます。


はい。しかし、どうやって?git stash -pは、すべての塊について対話形式で尋ねるだけで、理解できない長い行を吐き出します。別のマシンに持ち込める「パッチ」はどこにありますか?そしてgit diff--cachedとは何ですか?git applyはどのように使用しますか?もう少し詳しく説明してください。
モッティシュニーア

私は答えを詳細に訂正しました
Neo

4

パッチを作成して誰かに送ることができます。彼らがしなければならないことはそれを適用することです。

git diff >> file.diff

3
これは差分を生成するオブジェクトに対してのみ機能することに注意してください。出力では「バイナリファイルが異なる」ことに注意してください。
リアム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.