2014-05-12 14 views
8

Giả sử tôi đã cất giấu một số thay đổi sử dụng một trong số:Làm thế nào tôi có thể kiểm tra một tập tin không được theo dõi trong một stit git?

git stash -u 
git stash --include-untracked 

tôi có thể kiểm một tập tin riêng lẻ từ stash qua

git checkout [email protected]{0} -- filename 

Đó hoạt động nếu git biết về "filename", nhưng không làm việc nếu "tên tệp" không được trả lời. Có cách nào để kiểm tra các tập tin không được theo dõi từ stash không?

+0

Giả sử bạn muốn xóa tệp không được theo dõi, đây là bản sao có thể có của http://stackoverflow.com/questions/61212/removing-untracked-files-from-your-git-working-copy. 'Thanh toán' có nghĩa là bạn muốn khôi phục phiên bản khác của tệp. Nếu tệp không được tải xuống, nó là một tệp mới - không có phiên bản trước - vì vậy bạn phải xóa nó bằng cách sử dụng 'git clean'. –

+0

@RaulRene, tôi không nghĩ đó là một bản sao. Có vẻ như OP đang cố gắng * áp dụng một phần * một stash, bao gồm một tệp không được theo dõi. – Chris

+0

@ Chris, vâng, đó là những gì tôi đang cố gắng làm. Tôi đã có một nhánh đầu mà tôi thử nghiệm nhưng không thường cam kết. Tôi muốn kéo qua một vài thay đổi được chọn vào nhánh chủ đề thực sự của tôi. (Có, tôi chắc chắn rằng có một quy trình làm việc tốt hơn ... :-)) – eakst7

Trả lời

15

git stash tạo nội bộ đặc biệt hợp nhất ma thuật đen hợp nhất để lưu trữ các phần khác nhau của thay đổi của bạn. Cam kết hợp nhất có cam kết gốc (những gì bạn có ở trên cùng của nhánh khi bạn stashed) làm cha mẹ đầu tiên của nó, một cam kết throwaway đại diện cho nội dung chỉ mục tại thời điểm stashing làm cha mẹ thứ hai của nó và (chỉ khi bạn sử dụng --include-untracked) một cam kết throwaway chứa các tập tin untracked là cha mẹ thứ ba của nó.

Vì vậy, việc hợp nhất cam kết tài liệu tham khảo các tập tin untracked (là một trong những cha mẹ của nó) ... nhưng nó không thực sự bao gồm các tập tin trong cây riêng của mình (nếu điều đó không thực hiện bất kỳ nghĩa nào đó, hoặc là bạn đã có một vài điều cần tìm hiểu về nội bộ của Git ... hoặc bạn biết quá nhiều về các cam kết hợp nhất và toàn bộ cấu trúc này dường như quá khủng khiếp để suy nghĩ;)).

Nói tóm lại ... để truy cập phần untracked của stash của bạn, truy cập mẹ thứ ba: git checkout [email protected]{0}^3 -- filename

+1

Đó là phép thuật tôi đang tìm kiếm. Cảm ơn! – eakst7

1

Tôi đã có một chi nhánh đầu mà tôi thử nghiệm với nhưng thường không cam kết. Tôi muốn kéo qua một vài thay đổi được chọn vào nhánh chủ đề thực sự của tôi.

Trong trường hợp đó, đừng bận tâm với việc đánh dấu các thay đổi để di chuyển chúng từ nhánh này sang nhánh khác. Thực hiện trực tiếp một số git commit và di chuyển các thay đổi từ chi nhánh bạn đã cam kết sang chi nhánh khác bằng cách sử dụng git cherry-pick: git cherry-pick #hash_of_the_commit.

Các vấn đề liên quan