Làm thế nào tôi có thể chia sẻ một git stash?


32

Có cách nào để chia sẻ một stash trong git?

Tôi làm việc trên một số máy móc, và thường muốn có thể chuyển trạng thái làm việc hiện tại của mình từ máy này sang máy khác.

Tôi đang tìm kiếm một cách mà tôi có thể đẩy / kéo stash từ bản sao này sang bản sao khác và nó xuất hiện dưới dạng bản sao cho bản sao khác hoặc dưới dạng một nhánh từ xa rõ ràng. Tôi không mong đợi rằng cái trước sẽ nhất thiết phải hoạt động nếu điều khiển từ xa đã có sẵn stash của riêng nó.

Do đó, trên thực tế, đó là một nhánh có các cam kết trên đó (rõ ràng), tôi không tìm kiếm các giải pháp theo dòng "cam kết mỗi stash cho một nhánh và sau đó chia sẻ chúng" - Tôi đã có nhiều, nhiều, chi nhánh. Do đó, tôi đang tìm kiếm refspec hoặc tương tự mà tôi có thể sử dụng để kiểm soát việc đẩy / kéo.

Câu trả lời:


26

Stash chỉ là stashhoặc refs/stash, mà bạn có thể đẩy đến một nhánh từ xa:

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

Git sẽ từ chối đẩy trực tiếp đến refs/stash, tuy nhiên. Ngoài ra, dường như không có cách nào để đẩy toàn bộ reflog , nơi lưu trữ trước đó.


6
git push origin $(for sha in $(git rev-list -g stash); do echo $sha:refs/heads/stash_$sha; done)nên làm tốt cho tất cả các stash; Xem thêm stackoverflow.com/a/5248758/85371
sehe

11

Nó không được tích hợp tốt như một git pushnhưng để tránh tạo các nhánh, tôi sử dụng git stash show -p > change.patch(sau khi khắc phục các thay đổi) hoặc thậm chí git diff --cached > change.patchđể tạo một bản vá mà tôi git apply change.patchtrên máy tiếp theo tôi làm việc.

Với giải pháp này ít nhất, nếu nhiều tệp bị thay đổi trong trạng thái làm việc hiện tại của bạn, mọi thứ được chứa trong một đơn vị dữ liệu.


Vâng nhưng làm thế nào ? git stash -p chỉ hỏi tôi một cách tương tác về mọi hunk - sau đó nói ra những dòng dài mà tôi không hiểu. Đâu là "bản vá" mà tôi có thể mang theo sang máy khác? và git diff - cache là gì? và làm thế nào để bạn sử dụng git áp dụng? Bạn có thể giải thích thêm một chút nữa không?
Motti Shneor

Tôi đã chi tiết và sửa câu trả lời của mình
Neo

4

Bạn có thể tạo ra bản vá và gửi cho ai đó. việc bạn phải làm là áp dụng nó.

git diff >> file.diff

3
Lưu ý điều này sẽ chỉ hoạt động cho các đối tượng tạo ra một khác biệt; hãy cẩn thận với "tệp nhị phân khác nhau" trong đầu ra.
Liam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.