2013-05-31 23 views
17

Tôi tự hỏi nếu anh đào hái từ stash là có thể.Làm thế nào để anh đào hái từ stash trong git?

git stash save "test cherry-pick from stash" 

*git cherry-pick [email protected]{0}* --> Is this possible? 

Tôi nhận được exception sau khi tôi đã cố gắng trên command:

Error:

~/Documents$ git cherry-pick [email protected]{0} 
error: Commit 4590085c1a0d90de897633990f00a14b04405350 is a merge but no -m option was given. 
fatal: cherry-pick failed 

Trả lời

23

Vấn đề là một stash bao gồm hai hoặc ba cam kết. Khi stashing, cây làm việc được sửa đổi được lưu trữ trong một cam kết, chỉ mục trong một cam kết, và (nếu sử dụng cờ --include-untracked) bất kỳ tệp nào không được theo dõi trong cam kết thứ ba.

Bạn có thể thấy điều này nếu bạn sử dụng gitk --all và thực hiện stash.

enter image description here

[email protected]{0} điểm để cam kết có chứa các cây làm việc.

Bạn có thể tuy nhiên anh đào-pick từ đó cam kết nếu bạn làm

git cherry-pick "[email protected]{0}" -m 1 

Lý do mà cherry-pick nghĩ rằng stash là một hợp nhất, và do đó cần tham số -m 1 là stash cam kết có cha mẹ multpile, như bạn thấy trong biểu đồ.

Tôi không chắc chắn chính xác những gì bạn muốn đạt được bằng cách chọn hoa anh đào. Một giải pháp thay thế có thể là tạo một nhánh từ stash. Cam kết thay đổi ở đó và hợp nhất chúng vào nhánh hiện tại của bạn.

git stash branch stashchanges 
git commit -a -m "changes that were stashed" 
git checkout master 
git merge stashchanges 
+1

>> Tôi không chắc chắn chính xác những gì bạn muốn đạt được bằng cách chọn cherry? - Trong trường hợp của tôi, một hợp nhất đơn giản sẽ là tốt bằng cách làm stash áp dụng/pop. Nhưng, tôi đã tự hỏi liệu tôi có thể chọn một vài thay đổi từ những thay đổi được lưu trữ không. Cảm ơn bạn đã trả lời. –

-2

tôi đã không làm điều này trước. Nhưng người đàn ông trang trên cherry-pick nói rằng nó hoạt động trên cam kết chỉ.

Given one or more existing commits, apply the change each one introduces, 
    recording a new commit for each. This requires your working tree to be 
    clean (no modifications from the HEAD commit). 

Stashing không phải là cam kết và không di chuyển HEAD. Vì vậy, điều này không thể được thực hiện [đây chỉ là một đoán mặc dù]

+1

Thực ra, không chỉ là một dấu gạch ngang, đó là một số. Nhưng chúng thường không được hiển thị bằng công cụ ghi nhật ký. Xem câu trả lời của tôi. –