diff --git a/README.md b/README.md index 0293578..aa55a87 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,7 @@ All commands should work for at least git version 2.13.0. See the [git website]( - [Stash specific files](#stash-specific-files) - [Stash with message](#stash-with-message) - [Apply a specific stash from list](#apply-a-specific-stash-from-list) + - [Stash with keeping unstaged edit](#stash-with-keeping-unstaged-edit) - [Finding](#finding) - [I want to find a string in any commit](#i-want-to-find-a-string-in-any-commit) - [I want to find by author/committer](#i-want-to-find-by-authorcommitter) @@ -605,13 +606,11 @@ Then, you will need to use the `e` option to manually choose which lines to add. ### I want to stage my unstaged edits, and unstage my staged edits -This is tricky. The best I figure is that you should stash your unstaged edits. Then, reset. After that, pop your stashed edits back, and add them. +`stash` is a stack. So you can `stash` and `pop/apply --index n`(`apply` will keep it in stack). ```sh -$ git stash -k -$ git reset --hard -$ git stash pop -$ git add -A +$ git stash +$ git stash pop --index 1 ``` ## Unstaged Edits @@ -1448,6 +1447,10 @@ $ git stash push working-directory-path/filename1.ext working-directory-path/fil ```sh $ git stash save ``` +or +```sh +$ git push -m +``` ### Apply a specific stash from list @@ -1466,6 +1469,22 @@ $ git stash apply "stash@{n}" Here, 'n' indicates the position of the stash in the stack. The topmost stash will be position 0. +Furthermore, time based aslo possible(If you can remeber). + +```sh +$ git stash apply "stash@{2.hours.ago}" +``` + + +### Stash with keeping unstaged edit + +You can manually create a `stash commit`, and then use `git stash store`. + +```sh +$ git stash create +$ git stash store -m CREATED_SHA1 +``` + ## Finding ### I want to find a string in any commit diff --git a/README_zh-CN.md b/README_zh-CN.md index f49283a..cbec526 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -67,6 +67,12 @@ - [交互式rebase(interactive rebase)可能出现的问题](#%E4%BA%A4%E4%BA%92%E5%BC%8Frebaseinteractive-rebase%E5%8F%AF%E8%83%BD%E5%87%BA%E7%8E%B0%E7%9A%84%E9%97%AE%E9%A2%98) - [这个rebase 编辑屏幕出现'noop'](#%E8%BF%99%E4%B8%AArebase-%E7%BC%96%E8%BE%91%E5%B1%8F%E5%B9%95%E5%87%BA%E7%8E%B0noop) - [有冲突的情况](#%E6%9C%89%E5%86%B2%E7%AA%81%E7%9A%84%E6%83%85%E5%86%B5) + - [Stash](#stash) + - [暂存所有改动](#%E6%9A%82%E5%AD%98%E6%89%80%E6%9C%89%E6%94%B9%E5%8A%A8) + - [暂存指定文件](#%E6%9A%82%E5%AD%98%E6%8C%87%E5%AE%9A%E6%96%87%E4%BB%B6) + - [暂存时记录消息](#%E6%9A%82%E5%AD%98%E6%97%B6%E8%AE%B0%E5%BD%95%E6%B6%88%E6%81%AF) + - [使用某个指定暂存](#%E4%BD%BF%E7%94%A8%E6%9F%90%E4%B8%AA%E6%8C%87%E5%AE%9A%E6%9A%82%E5%AD%98) + - [暂存时保留未暂存的内容](#%E6%9A%82%E5%AD%98%E6%97%B6%E4%BF%9D%E7%95%99%E6%9C%AA%E6%9A%82%E5%AD%98%E7%9A%84%E5%86%85%E5%AE%B9) - [杂项(Miscellaneous Objects)](#%E6%9D%82%E9%A1%B9miscellaneous-objects) - [克隆所有子模块](#%E5%85%8B%E9%9A%86%E6%89%80%E6%9C%89%E5%AD%90%E6%A8%A1%E5%9D%97) - [删除标签(tag)](#%E5%88%A0%E9%99%A4%E6%A0%87%E7%AD%BEtag) @@ -248,13 +254,11 @@ $ git add -N filename.x ### 我想把暂存的内容变成未暂存,把未暂存的内容暂存起来 -这个有点困难, 我能想到的最好的方法是先stash未暂存的内容, 然后重置(reset),再pop第一步stashed的内容, 最后再add它们。 +`stash`是个栈,我们只需要`stash`起来,然后`pop`/`apply --index x`即可(`apply`会保留在栈中)。 ```sh -$ git stash -k -$ git reset --hard -$ git stash pop -$ git add -A +$ git stash +$ git stash pop --index 1 ``` ## 未暂存(Unstaged)的内容 @@ -844,6 +848,82 @@ Changes not staged for commit: (my-branch)$ git rebase --abort ``` + +## Stash + +### 暂存所有改动 + +暂存你工作目录下的所有改动 + +```sh +$ git stash +``` + +你可以使用`-u`来排除一些文件 + +```sh +$ git stash -u +``` + +### 暂存指定文件 + +假设你只想暂存某一个文件 + +```sh +$ git stash push working-directory-path/filename.ext +``` + +假设你想暂存多个文件 + +```sh +$ git stash push working-directory-path/filename1.ext working-directory-path/filename2.ext +``` + + +### 暂存时记录消息 + +这样你可以在`list`时看到它 + +```sh +$ git stash save +``` +或 +```sh +$ git push -m +``` + +### 使用某个指定暂存 + +首先你可以查看你的`stash`记录 + +```sh +$ git stash list +``` + +然后你可以`apply`某个`stash` + +```sh +$ git stash apply "stash@{n}" +``` + +此处, 'n'是`stash`在栈中的位置,最上层的`stash`会是0 + +除此之外,也可以使用时间标记(假如你能记得的话)。 + +```sh +$ git stash apply "stash@{2.hours.ago}" +``` + + +### 暂存时保留未暂存的内容 + +你需要手动create一个`stash commit`, 然后使用`git stash store`。 + +```sh +$ git stash create +$ git stash store -m "commit-message" CREATED_SHA1 +``` + ## 杂项(Miscellaneous Objects)