Theo trang chủ git-stash , "Stash được biểu diễn dưới dạng một xác nhận có cây ghi lại trạng thái của thư mục làm việc và cha mẹ đầu tiên của nó là cam kết HEAD
khi stash được tạo ra" và git stash show -p
cung cấp cho chúng ta "những thay đổi được ghi lại trong stash như là một khác biệt giữa trạng thái stash và cha mẹ ban đầu của nó.
Để giữ nguyên các thay đổi khác của bạn, hãy sử dụng git stash show -p | patch --reverse
như sau:
$ git init
Initialized empty Git repository in /tmp/repo/.git/
$ echo Hello, world >messages
$ git add messages
$ git commit -am 'Initial commit'
[master (root-commit)]: created 1ff2478: "Initial commit"
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 messages
$ echo Hello again >>messages
$ git stash
$ git status
# On branch master
nothing to commit (working directory clean)
$ git stash apply
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: messages
#
no changes added to commit (use "git add" and/or "git commit -a")
$ echo Howdy all >>messages
$ git diff
diff --git a/messages b/messages
index a5c1966..eade523 100644
--- a/messages
+++ b/messages
@@ -1 +1,3 @@
Hello, world
+Hello again
+Howdy all
$ git stash show -p | patch --reverse
patching file messages
Hunk #1 succeeded at 1 with fuzz 1.
$ git diff
diff --git a/messages b/messages
index a5c1966..364fc91 100644
--- a/messages
+++ b/messages
@@ -1 +1,2 @@
Hello, world
+Howdy all
Biên tập:
Một cải tiến nhẹ cho điều này là sử dụng git apply
thay thế cho bản vá:
git stash show -p | git apply --reverse
Ngoài ra, bạn cũng có thể sử dụng git apply -R
như một tốc ký git apply --reverse
.
Gần đây tôi đã tìm thấy thứ này rất tiện dụng ...