回答:
実行するだけで、パッチファイルを適用できます(まだ変更をコミットする必要はありません)。
git apply patchfile
次に、現在の作業ディレクトリから新しいスタッシュを作成するだけです。
git stash
git stash show "stash@{0}" -p > patch
、OPの2番目のシェルコマンドの代わりに、
stash@{0}
..
または、stashから(コンピューター1で)ブランチを作成することもできます。
git stash branch stashed_changes_branch
変更をコミットします。
git commit -a
次に、コンピューター2のリモートとして追加します。
git remote add pc1 user@computer1:/path/to/repo
これで、次を使用してリモート情報を取得できます
git fetch pc1
これで、好きな方法でコミットをインポートできます。使用してgitの桜のピックを、gitのリベースまたは何でもあなたのような...あなたはあなただけやったようにそれが見えるようにしたい場合はgitの隠し場所が適用されます。git cherry-pick --no-commitを使用できます。
computer1とcomputer2の間に直接接続がない場合。リモート(githubなど)を使用できます。
git push origin stashed_changes_branch
そしてcomputer2で:
git fetch
git stash list --oneline
)、技術的にはスタッシュを新しいコミットオブジェクトに適用する必要はありません。つまり、新しいブランチを作成する必要はありません。ただし、隠し場所を直接リモートにプッシュすることは控えめに言ってもトリッキーです。
あるマシンからstashをパッチファイルとして作成すると、そのパッチファイルを別のマシンと共有できます。
スタッシュをパッチとして作成する
$ git stash show "stash@{0}" -p > changes.patch
「stash @ {0}」はstashの参照です。最新のstashを含むパッチファイルが作成されます。別のコマンド$ git stash list
を使用してスタッシュのリストを表示し、パッチを適用するものを選択する場合。
パッチの適用
次に、そのスタッシュを別のマシンに転送し、プロジェクトのルートフォルダーに貼り付けます。次に、このコマンドを実行します
$ git apply changes.patch
間違いがあり、変更を元に戻したい場合
$ git apply changes.patch --reverse
別のオプションは、あるコンピューターから別のコンピューターへrsync
の.git
フォルダーです。 rsync
ファイルの変更のみを処理します(コピーより高速)。
このアプローチの欠点の1つは、構成も上書きされることです。これは、2つのマシン間で異なる.git構成を実行する場合には望ましくない場合があります。しかし、の--exclude
オプションを使用してファイルを除外することで、これを克服できますrsync
。
全体として、ネイティブのGitソリューションの方がクリーンだと思いますが、このrsync
ハックは、gitよりもrsyncに慣れている可能性がある急いでいる人にとってはいいかもしれません。
元の投稿の起動コマンド:
git stash show -p stash@{x} > patch_file
私にはうまくいきませんでした(何らかの理由で使用できないパッチファイルが作成されました)。代わりに:
git stash apply stash@{x}
git commit
私が移したかった各隠し場所について。次に、「親」リポジトリを「子」リポジトリのfile:///リーチ内に配置し、各stashコミットに対して以下を実行しました。
git fetch file:///path_to_parent_git && git cherry-pick commit_sha
git reset --soft HEAD^
git stash save my_new_stash_on_child
これはもっと複雑ですが、私にとってはトリックでした。
stashは、ベースコミットとインデックスの間の作業ツリーの特別なマージコミットです。1つの方法は、それぞれを個別のパッチとして保存し、stashの最初の親をチェックアウトし、2つのパッチからインデックスと作業ツリーを復元して、最後にstashを復元することです(1つの答えはこのように思われます)。
これは、スタッシュからすべての情報を完全に再作成するために必要です。コンフリクトを回避し、スタッシュが作成された場所を追跡するために、復元する前にスタッシュの最初の親を少なくともチェックアウトする必要があることを気にしない場合。
これは、すべての隠し場所を1つのリポジトリから別のリポジトリに完全に復元するために行ったものです。それらを同じコンピューター上に配置できない場合は、stashタグを作成後にバンドルに保存し、参照リストとバンドルをターゲットコンピューターにコピーできます。
元のリポジトリのルートから:
stash_
論理stash refで+の数を使用しました)refs=$(git stash list|cut -d: -f1)
for ref in $refs; do tag stash_${ref//[^0-9]} $ref; done
refs=$(git rev-parse $refs|tac)
oldpath=$PWD
注:これにはbashまたは互換シェルが必要です(ksh、zshが実行する必要があります...)stash_$((i++))
シェルがサポートしていない場合など、変数をインクリメントすることもできます。${param//pattern}
これで、新しいレポで、各参照について:
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done
git stash save
は非推奨になりましたgit stash push