Tôi đã sử dụng git stash pop
khá lâu. Gần đây tôi đã tìm hiểu về git stash apply
lệnh. Khi tôi thử nó, nó dường như hoạt động giống như git stash pop
.
Sự khác biệt giữa git stash pop
và là git stash apply
gì?
Tôi đã sử dụng git stash pop
khá lâu. Gần đây tôi đã tìm hiểu về git stash apply
lệnh. Khi tôi thử nó, nó dường như hoạt động giống như git stash pop
.
Sự khác biệt giữa git stash pop
và là git stash apply
gì?
Câu trả lời:
git stash pop
vứt bỏ stash (trên cùng, theo mặc định) sau khi áp dụng nó, trong khi git stash apply
để nó trong danh sách stash để sử dụng lại sau này (hoặc bạn có thể sau git stash drop
đó).
Điều này xảy ra trừ khi có xung đột sau đó git stash pop
, trong trường hợp đó, nó sẽ không xóa stash, khiến nó hoạt động chính xác như thế nào git stash apply
.
Một cách khác để xem xét nó: git stash pop
là git stash apply && git stash drop
.
git stash pop
kết quả của nó, bạn vẫn sẽ gặp lỗi xung đột.
Có liên kết hữu ích này nói lên sự khác biệt, như John Zwinck đã nêu và một nhược điểm git stash pop
.
Chẳng hạn, giả sử stash của bạn thay đổi xung đột với các thay đổi khác mà bạn đã thực hiện kể từ lần đầu tiên bạn tạo stash. Cả pop và áp dụng sẽ kích hoạt một cách hữu ích chế độ giải quyết xung đột hợp nhất, cho phép bạn giải quyết một cách độc đáo những xung đột như vậy và cũng sẽ không thoát khỏi stash, mặc dù có lẽ bạn cũng đang mong đợi pop. Vì rất nhiều người mong đợi stash chỉ là một stack đơn giản, điều này thường dẫn đến việc họ vô tình xuất hiện cùng một stash sau đó vì họ nghĩ rằng nó đã biến mất.
Liên kết: http://codingkillsthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/
Nhìn thấy nó trong hành động có thể giúp bạn hiểu rõ hơn về sự khác biệt.
Giả sử chúng tôi đang làm việc trên master
nhánh và có một tệp hello.txt
chứa chuỗi "Xin chào".
Hãy sửa đổi tệp và thêm chuỗi "thế giới" vào nó. Bây giờ bạn muốn chuyển đến một chi nhánh khác để sửa một lỗi nhỏ bạn vừa tìm thấy, vì vậy bạn cần stash
thay đổi:
git stash
Bạn đã chuyển sang chi nhánh khác, sửa lỗi và bây giờ bạn đã sẵn sàng tiếp tục làm việc trên master
chi nhánh của mình , do đó, bạn sẽ pop
thay đổi:
git stash pop
Bây giờ nếu bạn cố gắng xem lại nội dung stash bạn sẽ nhận được:
$ git stash show -p
No stash found.
Tuy nhiên, nếu bạn sử dụng git stash apply
thay thế, bạn sẽ nhận được nội dung được lưu trữ nhưng bạn cũng sẽ giữ nó:
$ git stash show -p
diff --git a/hello.txt b/hello.txt
index e965047..802992c 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1 +1 @@
-Hello
+Hello world
Vì vậy, pop
giống như pop của stack - nó thực sự loại bỏ phần tử một khi nó xuất hiện, trong khi apply
giống như nhìn trộm hơn .
Trong git
stash là vùng lưu trữ nơi các tệp thay đổi hiện tại có thể được di chuyển.
stash
khu vực này hữu ích khi bạn muốn lấy một số thay đổi từ git
kho lưu trữ và phát hiện một số thay đổi trong một số tệp tương hỗ có sẵn trong git
repo.
git stash apply //apply the changes without removing stored files from stash area.
git stash pop // apply the changes as well as remove stored files from stash area.
Lưu ý: -
git apply
chỉ áp dụng các thay đổi từ vùng ẩn trong khigit pop
áp dụng cũng như xóa thay đổi khỏistash
vùng.
Git Stash Pop vs apply
làm việc
Nếu bạn muốn áp dụng các thay đổi được sắp xếp hàng đầu của mình cho thay đổi không theo giai đoạn hiện tại và xóa cả stash đó, thì bạn nên thực hiện git stash pop
.
# apply the top stashed changes and delete it from git stash area.
git stash pop
Nhưng nếu bạn muốn áp dụng các thay đổi được sắp xếp hàng đầu của mình cho thay đổi không theo giai đoạn hiện tại mà không xóa nó, thì bạn nên thực hiện git stash apply
.
Lưu ý: Bạn có thể liên kết trường hợp này với
Stack
lớppop()
vàpeek()
phương thức, trong đó pop thay đổi đỉnh bằng cách giảm (top = top-1) nhưngpeek()
chỉ có thể lấy phần tử trên cùng.