git stash phiên bản áp dụng


513

Tôi có 2 chi nhánh: thạc sĩ | thiết kế

Làm việc trong thiết kế tôi đã làm một stash và chuyển sang làm chủ, thực hiện một số điều chỉnh. Chuyển trở lại thiết kế và stash applychỉ làm mất tất cả những thay đổi của tôi trong nhánh thiết kế.

Tôi hy vọng tất cả các công việc của tôi là trong một stash vì tôi đã không xóa hoặc loại bỏ những thứ này.

Nếu tôi làm một danh sách stash, tôi nhận được 4 kết quả:

stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{2}: WIP on design: eb65635... Email Adjust
stash@{3}: WIP on design: eb65635... Email Adjust

Nếu tôi thử git stash apply f2c0c72tôi sẽ gặp lỗi:

fatal: Needed a single revision
f2c0c72: no valid stashed state found

Làm thế nào tôi có thể áp dụng một stash cụ thể?


26
Lưu ý rằng bạn hiện có (Q4 2016, Git 2.11) cú pháp git stash apply 0(thay vì git stash apply stash@{0}). Xem câu trả lời của tôi ở đây .
VonC

Câu trả lời:


838

Các phím vào stash thực sự là các stash@{n}mục bên trái. Hãy thử

git stash apply stash@{0}

(lưu ý rằng trong một số shell bạn cần trích dẫn "stash@{0}", như zsh, fish và powershell).

Kể từ phiên bản 2.11, khá dễ dàng, bạn có thể sử dụng số ngăn xếp N thay vì sử dụng stash@{n}. Vì vậy, bây giờ thay vì sử dụng:

git stash apply "stash@{n}"

Bạn có thể gõ:

git stash apply n

Để có được danh sách stash:

git stash list

Thực tế stash@{0}là một bản sửa đổi trong git mà bạn có thể chuyển sang ... nhưng git stash apply ...nên tìm ra cách DTRT để áp dụng nó vào vị trí hiện tại của bạn.


90
Chỉ cần lưu ý rằng trên một số shell, stash @ {n} phải được trích dẫn.
Senjai

7
Một mẹo khác: bạn có thể thực hiện ví dụ gitk stash@{0}để hiển thị các thay đổi bạn đã thực hiện trong một stash cụ thể.
antinome

11
người dùng zsh cần phải tăng gấp đôi quote ví dụgit stash apply "stash@{0}"
mynameistechno

7
stash@{n}là lệnh khó xử nhất để gõ. Có bất kỳ phím tắt để làm điều này ngoài việc tạo bí danh hoặc chức năng của riêng bạn?
Dylanthepiguy

2
git stash apply nlà hòa bình
Victor

241

Để áp dụng stash và xóa nó khỏi danh sách stash, hãy chạy:

git stash pop stash@{n}

Để áp dụng stash và giữ nó trong bộ đệm ẩn, hãy chạy:

git stash apply stash@{n}

8
Điều này thật tuyệt, cảm ơn vì đã phân biệt giữa hai lựa chọn. Tôi vừa thử điều này và có vẻ như nếu bạn bật một stash từ nhánh-a lên nhánh-b, thì stash sẽ vẫn còn trong bộ đệm ẩn. Tôi đoán đó sẽ là vì vậy bạn vẫn có tùy chọn bật / áp dụng stash cho nhánh-a vào một ngày trong tương lai. Thực sự hy vọng rằng có ý nghĩa. Tiện dụng!
longda

42
Đối với PowerShell:git stash pop "stash@{n}"
ankitjaininfo

1
PowerShell rất vui khi chỉ cần niềng răng trong dấu ngoặc kép / dấu ngoặc đơn:git stash apply stash@"{n}"
m1kael

PowerShell cũng sẽ chấp nhận git stash apply stash@`{n`}(lưu ý các backticks trước khi niềng răng).
Ian Kemp

52

Kể từ phiên bản 2.11, khá dễ dàng, bạn có thể sử dụng số ngăn xếp N thay vì nói "stash@{n}". Vì vậy, bây giờ thay vì sử dụng:

git stash apply "stash@{n}"

Bạn có thể gõ:

git stash apply n

Ví dụ: trong danh sách của bạn:

stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{2}: WIP on design: eb65635... Email Adjust
stash@{3}: WIP on design: eb65635... Email Adjust

Nếu bạn muốn áp dụng, stash@{1}bạn có thể gõ:

git stash apply 1

Mặt khác, bạn có thể sử dụng nó ngay cả khi bạn có một số thay đổi trong thư mục của mình kể từ 1.7.5.1, nhưng bạn phải chắc chắn rằng stash sẽ không ghi đè lên các thay đổi thư mục làm việc của bạn nếu nó sẽ gặp lỗi:

error: Your local changes to the following files would be overwritten by merge:
        file
Please commit your changes or stash them before you merge.

Trong các phiên bản trước 1.7.5.1, nó đã từ chối hoạt động nếu có sự thay đổi trong thư mục làm việc.


Ghi chú phát hành Git:

Người dùng luôn phải nói "stash @ {$ N}" khi đặt tên cho một thành phần duy nhất ở vị trí mặc định của stash, tức là reflog trong refs / stash. Lệnh "git stash" đã học cách chấp nhận "git stash áp dụng 4" dưới dạng viết tắt của "git stash áp dụng stash @ {4}"

git stash áp dụng "được sử dụng để từ chối làm việc nếu có bất kỳ thay đổi nào trong cây làm việc, ngay cả khi thay đổi không trùng lặp với thay đổi mà stash đã ghi


41

Nếu một cái nằm trên máy Windows và trong PowerShell, người ta cần trích dẫn đối số như:

git stash apply "stash@{0}"

... hoặc để áp dụng các thay đổi và xóa khỏi stash:

git stash pop "stash@{0}"

Nếu không có dấu ngoặc kép, bạn có thể gặp lỗi này:

gây tử vong: đối số mơ hồ 'stash @': không biết sửa đổi hoặc đường dẫn không có trong cây làm việc.


Rõ ràng đây là cách bạn phải làm khi sử dụng vỏ cá trên Mac OSX 10.11.
lps

8
git stash list

sau đó chọn stash để áp dụng và chỉ sử dụng số:

git stash apply 1

2
Git Stash list 

Danh sách sẽ hiển thị tất cả các mục được lưu trữ, ví dụ: stash @ {0}:, stash @ {1} :, .., stash @ {n}:

Sau đó chọn số n biểu thị stash @ {n}:

git stash apply n 

for eg: git stash apply 1 will apply that particular stashed changes to the current branch
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.