Tôi muốn chỉ có thể lưu trữ các thay đổi từ một tệp duy nhất:
git stash save -- just_my_file.txt
Những điều trên không hoạt động mặc dù. Bất kỳ lựa chọn thay thế?
Tôi muốn chỉ có thể lưu trữ các thay đổi từ một tệp duy nhất:
git stash save -- just_my_file.txt
Những điều trên không hoạt động mặc dù. Bất kỳ lựa chọn thay thế?
cp just_my_file.txt just_my_file.txt.manualstash
bây giờ bạn có thể thực hiện tất cả các kiểm tra và nội dung và vì bản sao là "tệp chưa được kiểm tra", bạn có thể di chuyển qua các chi nhánh và cam kết mà không gặp bất kỳ sự cố nào. Khi bạn đang ở trên các chi nhánh phải / cam kết mà bạn muốn "hợp nhất các đơn tập tin" chỉ làm mv just_my_file.txt.manualstash just_my_file.txt
và bây giờ bạn có thể xem lại các thay đổi và cam kết nó khi cần thiết
git clean -f -d
trong thời gian chờ đợi, vì nó xóa các tệp không được theo dõi. :-)
Câu trả lời:
Tôi nghĩ stash -p
có lẽ là sự lựa chọn mà bạn muốn, nhưng đề phòng bạn gặp phải những thứ khác thậm chí còn khó khăn hơn trong tương lai, hãy nhớ rằng:
Stash
thực sự chỉ là một sự thay thế rất đơn giản cho các branch
bộ phức tạp hơn một chút . Stash rất hữu ích để di chuyển mọi thứ một cách nhanh chóng, nhưng bạn có thể hoàn thành những việc phức tạp hơn với các nhánh mà không phải đau đầu và tốn nhiều công sức hơn.
# git checkout -b tmpbranch
# git add the_file
# git commit -m "stashing the_file"
# git checkout master
đi về và làm những gì bạn muốn, sau đó đơn giản rebase
và / hoặc merge
tmpbranch. Nó thực sự không phải là quá nhiều công việc khi bạn cần theo dõi cẩn thận hơn mức cho phép.
git checkout tmpbranch the_file
từ cái chính làm cho điều này hữu ích hơn để kéo các thay đổi của một tệp trở lại nhánh cái. Xem stackoverflow.com/a/307872/4692594
Nếu bạn không muốn chỉ định một thông báo với các thay đổi được lưu trữ của mình, hãy chuyển tên tệp sau dấu gạch ngang kép.
$ git stash -- filename.ext
Nếu đó là một tệp chưa được kiểm soát / mới, bạn sẽ phải xử lý nó trước.
Tuy nhiên, nếu bạn làm muốn chỉ định một tin nhắn, sử dụng push
.
git stash push -m "describe changes to filename.ext" filename.ext
Cả hai phương pháp đều hoạt động trong phiên bản git 2.13+
git stash -- filename.ext
, git commit --amend
, git stash pop
Bạn có thể lưu trữ tương tác các dòng đơn với git stash -p
(tương tự với git add -p
).
Nó không cần tên tệp, nhưng bạn có thể bỏ qua các tệp khác dcho đến khi bạn đến tệp bạn muốn lưu trữ và lưu trữ tất cả các thay đổi trong đó a.
git 2.14.1
bạn có thể chỉ định tên tệpgit stash -p <filename>
Tùy chọn tốt nhất là sắp xếp mọi thứ trừ tệp này và yêu cầu stash giữ chỉ mục với git stash save --keep-index
, do đó lưu trữ tệp chưa phân giai đoạn của bạn:
$ git add .
$ git reset thefiletostash
$ git stash save --keep-index
Như Dan đã chỉ ra, thefiletostash
là tệp duy nhất được đặt lại bởi kho lưu trữ, nhưng nó cũng lưu trữ các tệp khác, vì vậy nó không chính xác như những gì bạn muốn.
git stash pop
, nó sẽ không áp dụng tất cả các tệp, không chỉ một tệp mà chúng ta muốn lưu trữ?
Chỉ trong trường hợp bạn thực sự muốn nói "loại bỏ các thay đổi" bất cứ khi nào bạn sử dụng "git stash" (và không thực sự sử dụng git stash để lưu trữ nó tạm thời), trong trường hợp đó bạn có thể sử dụng
git checkout -- <file>
Lưu ý rằng git stash chỉ là một giải pháp thay thế nhanh chóng và đơn giản hơn cho việc phân nhánh và thực hiện công việc.