Đôi khi bạn muốn chuyển đổi các nhánh, nhưng bạn đang thực hiện một phần chưa hoàn thành trong dự án hiện tại của mình. Bạn không muốn thực hiện commit hoàn thành một nửa công việc. Git stashing cho phép bạn làm như vậy. Lệnh git stash cho phép bạn chuyển đổi các nhánh mà không cần commit nhánh hiện tại.
Hình dưới đây minh họa các thuộc tính và vai trò của lưu trữ liên quan đến kho lưu trữ và thư mục làm việc.
Nói chung, ý nghĩa của kho lưu trữ là ” cất giữ thứ gì đó một cách an toàn ở một nơi ẩn .” Ý nghĩa trong Git cũng giống như vậy đối với stash, Git tạm thời lưu dữ liệu của bạn một cách an toàn mà không cần commit.
Stashing sẽ loại bỏ trạng thái lộn xộn của thư mục làm việc của bạn và tạm thời lưu nó để sử dụng lại sau. Nhiều tùy chọn có sẵn với git stash. Một số tùy chọn hữu ích được đưa ra dưới đây:
- Git stash
- Git stash save
- Git stash list
- Git stash apply
- Git stash changes
- Git stash pop
- Git stash drop
- Git stash clear
- Git stash branch
Nội dung chính
1. Cách Git Stashing làm việc
Để hiểu nó qua một ví dụ cụ thể sau. Tôi đã thực hiện các thay đổi đối với dự án GitExample2 của mình trong hai file từ hai nhánh khác nhau. Tôi đang ở trong một trạng thái lộn xộn và tôi vẫn chưa hoàn toàn chỉnh sửa bất kỳ file nào. Vì vậy, tôi muốn lưu nó tạm thời để sử dụng sau này. Chúng ta có thể lưu trữ nó như lưu trạng thái hiện tại của nó. Để lưu trữ, hãy xem trạng thái hiện tại của kho lưu trữ. Để kiểm tra trạng thái hiện tại của kho lưu trữ, hãy chạy lệnh git status. Lệnh git status được sử dụng như sau:
Cú pháp:
git status
Đầu ra:
Từ kết quả đầu ra ở trên, bạn có thể thấy trạng thái rằng có hai file design.css và newfile.txt chưa được kiểm soát có sẵn trong kho lưu trữ. Để lưu tạm thời, chúng ta có thể sử dụng lệnh git stash. Lệnh git stash được sử dụng như:
Cú pháp:
git stash
Đầu ra:
Trong đầu ra đã cho, kết quả được lưu bằng lệnh git stash. Chúng ta có thể kiểm tra trạng thái của kho lưu trữ.
Như bạn có thể thấy, công việc của tôi chỉ được cất giữ ở vị trí hiện tại của nó. Bây giờ, thư mục đã được làm sạch. Tại thời điểm này, bạn có thể chuyển đổi giữa các nhánh và làm việc trên chúng.
2. Git Stash Save (Lưu với tin nhắn):
Trong Git, các thay đổi có thể được lưu trữ bằng một tin nhắn. Để lưu trữ một thay đổi bằng một tin nhắn, hãy chạy lệnh dưới đây:
Cú pháp:
git stash save " < Stashing Message > "
Đầu ra:
Kho trên sẽ được lưu bằng tin nhắn
3. Xem Danh sách Git Stash (Kiểm tra các Kho lưu trữ)
Để kiểm tra các kho lưu trữ Stash được lưu trữ, hãy chạy lệnh dưới đây:
Cú pháp:
git stash list
Đầu ra:
Trong trường hợp trên, tôi đã tạo một kho lưu trữ, được hiển thị dưới dạng “stash@{0}: WIP on master: d4e21b1 design“.
Nhấn q để thoát danh sách các stash.
Nếu chúng ta có nhiều hơn một kho, thì Nó sẽ hiển thị tất cả các kho tương ứng với id kho khác nhau. Hãy xem xét đầu ra dưới đây:
Nó sẽ hiển thị tất cả các kho có lập chỉ mục là stash @ {0}: stash @ {1}:, v.v.
4. Sử dụng lại kho đã lưu trữ tạm
Bạn có thể áp dụng lại các thay đổi mà bạn vừa lưu trữ bằng cách sử dụng lệnh git stash. Hãy sử dụng lệnh git stash, theo sau là tùy chọn apply. Nó được sử dụng như:
Cú pháp:
git stash apply
Đầu ra:
Kết quả ở trên sẽ khôi phục kho cuối cùng. Bây giờ, nếu bạn kiểm tra trạng thái của kho lưu trữ, nó sẽ hiển thị những thay đổi trên file. Hãy xem xét đầu ra dưới đây :
Từ đầu ra ở trên, bạn có thể thấy rằng kho lưu trữ được khôi phục về trạng thái trước đó trước khi lưu trữ. Nó đang hiển thị đầu ra là “Các thay đổi chưa commit .”
Trong trường hợp có nhiều hơn một kho, bạn có thể sử dụng lệnh “git stash apply” theo sau là id chỉ mục lưu trữ để áp dụng commit cụ thể. Nó được sử dụng như:
Cú pháp:
git stash apply <stash id>
Hãy xem xét đầu ra dưới đây:
Đầu ra:
Nếu chúng ta không chỉ định kho, Git sẽ lấy kho gần đây nhất và cố gắng áp dụng nó.
5. Xem Thay đổi của Git Stash
Chúng ta có thể theo dõi các kho và thay đổi chúng. Để xem các thay đổi trong file trước khi lưu trữ và sau hoạt động lưu trữ, hãy chạy lệnh dưới đây:
Cú pháp:
git stash show
Lệnh trên sẽ hiển thị file được lưu trữ và các thay đổi được thực hiện trên chúng. Hãy xem xét đầu ra dưới đây:
Đầu ra:
Kết quả ở trên minh họa rằng có hai file được lưu trữ và hai lần chèn được thực hiện trên chúng.
Chúng ta có thể theo dõi chính xác những thay đổi nào được thực hiện trên file. Để hiển thị nội dung đã thay đổi của file, hãy thực hiện lệnh dưới đây:
Cú pháp:
git stash show -p
Ở đây, -p là viết tắt của một phần kho(the partial stash). Lệnh đã cho sẽ hiển thị các file và nội dung đã chỉnh sửa, hãy xem xét kết quả đầu ra bên dưới:
Đầu ra:
Nhấn q để thoát khỏi trình xem thay đổi của stash
Kết quả trên hiển thị tên file có nội dung đã thay đổi. Nó hoạt động giống như lệnh git diff. Lệnh git diff cũng sẽ hiển thị chính xác như vậy.
6. Git Stash Pop (Áp dụng lại các thay đổi đã lưu trữ)
Git cho phép người dùng áp dụng lại các commit trước đó bằng cách sử dụng lệnh git stash pop. Tùy chọn popping xoá các thay đổi khỏi kho lưu trữ và áp dụng chúng vào file làm việc của bạn.
Lệnh git stash pop khá giống với git stash apply. Sự khác biệt chính giữa cả hai lệnh này là lệnh stash pop xóa kho lưu trữ khỏi ngăn xếp sau khi nó được áp dụng.
Cú pháp:
git stash pop
Lệnh trên sẽ áp dụng lại các commit trước đó cho kho lưu trữ. Hãy xem xét đầu ra bên dưới.
Đầu ra:
Git Stash Drop (Unstash)
Lệnh git stash drop được sử dụng để xóa một stash khỏi hàng đợi. Nói chung, nó xóa kho lưu trữ gần đây nhất. Cần thận trọng trước khi sử dụng lệnh này, vì rất khó để hoàn lại nếu đã áp dụng.
Lệnh thả kho sẽ được sử dụng như:
Cú pháp:
git stash drop
Đầu ra:
Trong kết quả đầu ra ở trên, kho lưu trữ gần đây nhất (stash @ {0}) đã bị loại bỏ từ ba kho lưu trữ đã cho. Lệnh danh sách lưu trữ liệt kê tất cả các kho lưu trữ có sẵn trong hàng đợi.
Chúng ta cũng có thể xóa một kho cụ thể khỏi hàng đợi. Để xóa một kho lưu trữ cụ thể khỏi các kho lưu trữ có sẵn, hãy chuyển id kho vào lệnh drop kho lưu trữ. Nó sẽ được xử lý như sau:
Cú pháp:
git stash drop < stash id >
Giả sử rằng tôi có hai phần lưu trữ có sẵn trong hàng đợi của mình và tôi không muốn bỏ phần lưu trữ gần đây nhất của mình, nhưng tôi muốn xóa phần cũ hơn. Sau đó, nó sẽ được vận hành như sau:
git stash drop stash @ {1}
7. Git Stash Clear
Lệnh git stash clear cho phép xóa tất cả các kho lưu trữ có sẵn cùng một lúc. Để xóa tất cả các kho lưu trữ có sẵn, hãy thao tác lệnh dưới đây:
Cú pháp:
git stash clear
nó sẽ xóa tất cả các kho lưu trữ tồn tại trong kho lưu trữ.
Đầu ra:
Tất cả các kho được xóa trong đầu ra ở trên. Lệnh git stash list để trống vì không có stash nào trong kho lưu trữ.
8. Git Stash Branch
Nếu bạn lưu trữ một số công việc trên một nhánh cụ thể và tiếp tục làm việc trên nhánh đó. Sau đó, nó có thể tạo ra xung đột trong quá trình hợp nhất vì có quá nhiều stash. Vì vậy, tốt hơn nên lưu trữ công việc trên một nhánh riêng biệt với tên cụ thể nào đó.
Lệnh git stash branch cho phép người dùng lưu trữ công việc trên một nhánh riêng biệt để tránh xung đột. Cú pháp của nhánh này như sau:
Cú pháp:
git stash branch < Tên nhánh gợi ý >
Lệnh trên sẽ tạo một nhánh mới và chuyển công việc đã lưu trữ trên đó. Hãy xem xét đầu ra dưới đây:
Đầu ra:
Trong kết quả đầu ra ở trên, công việc đã lưu trữ được chuyển sang nhánh mới được tạo. Nó sẽ tránh xung đột hợp nhất trên nhánh master.
Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.
Tài liệu từ cafedev:
- Full series tự học Git từ cơ bản tới nâng cao tại đây nha.
- Ebook về Git tại đây.
- Các nguồn kiến thức MIỄN PHÍ VÔ GIÁ từ cafedev tại đây
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!