Как я могу поделиться git stash?

32

Есть ли способ поделиться тайником в git?

Я работаю на нескольких машинах и часто хочу иметь возможность перемещать свое текущее рабочее состояние с одного на другое.

Я ищу способ, которым я могу нажать / вытащить тайник из одного клона в другой, и он будет отображаться либо как тайник для другого клона, либо как видимая удаленная ветвь. Я не ожидаю, что первый обязательно сработает, если у пульта уже есть собственный тайник.

Учитывая, что stash, по сути, уже является веткой с коммитами (по-видимому), я не ищу решения в духе «зафиксировать каждый тайник в ветке, а затем поделиться им» - у меня уже есть много, много веток. Поэтому я ищу refspec или аналогичный, который я могу использовать для управления push / pull.

PeterJCLaw
источник

Ответы:

26

Тайник просто stashили refs/stash, который вы можете отправить в удаленную ветку:

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

Git refs/stash, однако, откажется от прямого нажатия . Кроме того, кажется, что нет способа выдвинуть целые reflogs , где хранятся предыдущие тайники.

grawity
источник
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
сехе
11

Он не так хорошо интегрирован, как, git pushно чтобы избежать создания веток, я использую git stash show -p > change.patch(после сохранения изменений) или даже git diff --cached > change.patchдля создания патча, на котором я работаю git apply change.patchна следующей машине.

По крайней мере, с этим решением, если в текущем рабочем состоянии изменяется много файлов, все содержится в одном блоке данных.

Нео
источник
Да, но как ? git stash -p только в интерактивном режиме спрашивает меня о каждом куске, а затем выплевывает длинную очередь, которую я не понимаю. Где этот «патч» я могу взять с собой на другую машину? а что такое git diff - кешируется? а как вы используете git apply? Можете ли вы уточнить немного дальше, пожалуйста?
Мотти Шнеор
Я подробно изложил и исправил свой ответ
Neo
4

Вы можете сделать патч и отправить его кому-нибудь. то, что вы должны сделать, это применить это.

git diff >> file.diff

источник
3
Обратите внимание, что это будет работать только для объектов, которые генерируют diff; Остерегайтесь «Двоичные файлы отличаются» в выводе.
Лиам