git stash và git pull


87

Tôi mới sử dụng Git và tôi đang sử dụng plugin EGit eclipse để cam kết.

Tôi đã sửa đổi một số tệp và lưu trữ các thay đổi, sau đó tôi thực hiện git pulltrong dòng lệnh kéo tất cả các cam kết mới nhất. Sau đó, tôi đã làm Apply stashed changestừ EGit. Bây giờ nó áp dụng các thay đổi của tôi và những thay đổi lấy từ lần cam kết cuối cùng của các tệp được lưu trữ đã biến mất. Tôi không chắc tại sao nó không hỏi tôi về xung đột hợp nhất và ghi đè các thay đổi của tôi và làm mất các thay đổi cam kết trước đó.

Làm thế nào để có được những thay đổi đó?


Nghe có vẻ không hợp lý. Áp dụng kho lưu trữ mang lại các thay đổi không được bảo vệ hoặc gây ra xung đột hợp nhất. Tôi nghĩ bạn đã quên đề cập đến điều gì đó. Ngoài ra, bạn có thể lặp lại các bước của mình, hầu hết có thể kho lưu trữ của bạn vẫn còn trong danh sách, hãy sử dụng git stash listđể hiển thị nó.
kan

Câu trả lời:


207

Khi bạn có những thay đổi trên bản sao làm việc của mình, từ dòng lệnh thực hiện:

git stash 

Điều này sẽ lưu trữ các thay đổi của bạn và xóa báo cáo trạng thái của bạn

git pull

Điều này sẽ kéo các thay đổi từ nhánh ngược dòng. Đảm bảo rằng nó cho biết tua đi nhanh trong báo cáo. Nếu không, có thể bạn đang thực hiện hợp nhất ngoài ý muốn

git stash pop

Điều này sẽ áp dụng các thay đổi được lưu trữ trở lại bản sao làm việc và xóa các thay đổi khỏi kho lưu trữ trừ khi bạn có xung đột. Trong trường hợp xung đột, chúng sẽ ở trong kho để bạn có thể bắt đầu lại nếu cần.

nếu bạn cần xem những gì có trong kho của bạn

git stash list

@java_newbie, Nếu bạn muốn làm điều này với stash và pull no, không có cách nào cả. Nhưng bạn có thể đạt được kết quả tương tự với rebase. Lệnh 'git rebase origin / <upper branch name>' sẽ làm điều tương tự.
yilmazhuseyin

5
Tôi nghĩ điều này sẽ làm được:git stash && git pull && git stash pop
Fabrice Kabongo

@yilmazhuseyin Ý bạn là gì khi nói 'cùng một kết quả' Bạn có thể đưa ra một giai thoại nếu được không? Ý bạn là git rebase origin/mastersẽ tạo ra kết quả tương tự như git stash; git pull; git stash pop?
nehem

8
Nếu sử dụng phiên bản Git v2.9.0 trở lên, hãy thử git pull --rebase --autostash. FYI
momocow

1
Không --autostashluôn luôn làm việc? Ví dụ: nếu tôi có các tệp chưa được theo dõi đã có một phần trong Git?
qräbnö
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.