清理存储点
我们可以使用 git stash drop 删除存储:
git stash drop stash@{1}
Dropped stash@{1} (17e2697fd8251df6163117cb3d58c1f62a5e7cdb)
如果我们使用 git stash clear 它将删除所有隐藏:
git stash clear
隐藏未跟踪或者忽略的文件
git stash 将存储已添加到索引中的更改(暂存更改)以及对 Git 当前跟踪的文件所做的更改(未暂存更改)。
它不会将尚未暂存和忽略文件的新文件存储在工作副本中。
在这些情况下, git stash -u 选项(或者 --include-untracked)有助于存储未跟踪的文件。
git stash -u
我们也可以在运行 git stash 时使用 -a 选项(或者 --all)来添加对忽略文件的更改。
git stash -a
重新应用我们保存的更改
git stash pop 从存储中删除更改并将它们重新应用到工作副本。
如果我们想重新应用更改并将它们保留在存储中,另一种方法是运行 git stash apply:
git status
On branch master nothing to commit, working tree clean
git stash pop
On branch master Changes to be committed: new file: style.css Changes not staged for commit: modified: index.html Dropped refs/stash@{0} (32b3aa1d185dfe6d57b3c3cc3b32cbf3e380cc6a)
暂存你的工作
git stash 获取未提交的暂存和未暂存更改,将它们保存以供进一步使用,然后从工作副本中返回它们。
首先,我们可以运行 git status 以便查看脏状态。
然后运行 git stash 来存储更改:
git status
On branch master Changes to be committed: new file: style.css Changes not staged for commit: modified: index.html
$git stash
Saved working directory and index state WIP on master: 5002d47 our new homepage HEAD is now at 5002d47 our new homepage
$git status
On branch master nothing to commit, working tree clean
多个存储点
我们可以多次运行 git stash 以创建多个 stash,然后运行 git stash list 查看它们。
默认情况下,stash 被标识为“WIP”——正在进行中。
它位于分支的顶部,并提交我们从中创建存储的提交。
git stash list
stash@{0}: WIP on master: 5002d47 our new homepage stash@{1}: WIP on master: 5002d47 our new homepage stash@{2}: WIP on master: 5002d47 our new homepage
用 git stash save "message" 添加一些上下文是很好的
默认情况下,git stash pop 将重新应用上次创建的 stash:stash@{0}
我们可以像这样选择要重新应用的存储:
git stash pop stash@{3}
查看存储差异
使用 git stash show 查看 stash 的摘要:
git stash show
index.html | 1 + style.css | 3 +++ 2 files changed, 4 insertions(+)
我们还可以使用 -p 或者 --patch 选项查看存储的完整差异:
git stash show -p
diff --git a/style.css b/style.css new file mode 100644 index 0000000..d92368b --- /dev/null +++ b/style.css @@ -0,0 +1,3 @@ +* { + text-decoration: blink; +} diff --git a/index.html b/index.html index 9daeafb..ebdcbd2 100644 --- a/index.html +++ b/index.html @@ -1 +1,2 @@ +<link rel="stylesheet" href="style.css"/>
部分存储
Git 允许选择是否要存储单个文件、一堆文件或者文件中的单个更改。
git stash-p 遍历工作副本中的每个大块(Git 中的一个更改)并询问我们是否要存储它:
git stash -p
diff --git a/style.css b/style.css new file mode 100644 index 0000000..d92368b --- /dev/null +++ b/style.css @@ -0,0 +1,3 @@ +* { + text-decoration: blink; +} Stash this hunk [y,n,q,a,d,/,e,?]? y diff --git a/index.html b/index.html index 9daeafb..ebdcbd2 100644 --- a/index.html +++ b/index.html @@ -1 +1,2 @@ +<link rel="stylesheet" href="style.css"/> Stash this hunk [y,n,q,a,d,/,e,?]? n
Hunk指令
命令 | 描述 |
---|---|
/ | 搜索regex的hunk。 |
? | 打印帮助。 |
n | 不要困扰着亨克。 |
a | 删除这个hunk,所有后来的人都在文件中。 |
d | 不要删除这个hunk或者文件中的任何后来的人。 |
e | 手动编辑当前的HUNK |
q | 退出(所选的Hunks将藏起) |
s | 将HUNK分成较小的声音。 |
y | 藏起来。 |
从 stash 创建一个分支
我们可以使用 git stash branch 创建一个新分支以将隐藏更改应用于它:
git stash branch add-stylesheet stash@{1}
Switched to a new branch 'add-stylesheet' On branch add-stylesheet Changes to be committed: new file: style.css Changes not staged for commit: modified: index.html Dropped refs/stash@{1} (32b3aa1d185dfe6d57b3c3cc3b32cbf3e380cc6a)
定义
git stash 命令搁置我们对工作副本所做的更改,以便我们可以做另一项工作,然后返回并重新应用它们。