Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
git_stash [2019/02/20 15:35] – created rpjdaygit_stash [2019/02/26 19:18] (current) – [git stash branch] rpjday
Line 1: Line 1:
 ===== Overview ===== ===== Overview =====
  
-Basic operation of ''git stash''.+Basic operation of ''git stash'', which allows you to save uncommitted work, and recover it later. 
 + 
 +===== SYNOPSIS ===== 
 + 
 +<code> 
 +git stash list [<options>
 +git stash show [<stash>
 +git stash drop [-q|--quiet] [<stash>
 +git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>
 +git stash branch <branchname> [<stash>
 +git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] 
 +             [-u|--include-untracked] [-a|--all] [-m|--message <message>
 +             [--] [<pathspec>...]] 
 +git stash clear 
 +git stash create [<message>
 +git stash store [-m|--message <message>] [-q|--quiet] <commit> 
 +</code> 
 + 
 +===== Basic stash operations ===== 
 + 
 +==== git stash push ==== 
 + 
 +Save both the unstaged and staged content in a new stash: 
 + 
 +<code> 
 +$ git stash push 
 +</code> 
 + 
 +then display the current list of stashes: 
 + 
 +<code> 
 +$ git stash list 
 +stash@{0}: WIP on master: 40e196a906d9 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 
 +
 +</code> 
 + 
 +Significant options for ''git stash push'': 
 + 
 +  * [''-m'',''%%--%%message'']: Add an informative stashing message 
 +  * ''%%--%%keep-index'': Remember what was already staged versus what wasn'
 +  * ''%%--%%include-untracked'': Stash untracked, unignored files, then clean 
 +  * ''%%--%%all'': Stash //all// untracked files, including ignored ones, then clean 
 + 
 +==== git stash show ==== 
 + 
 +By default, show most recent stash: 
 + 
 +<code> 
 +$ git stash show 
 + MAINTAINERS | 4 ++++ 
 + README      | 4 ++++ 
 + 2 files changed, 8 insertions(+) 
 +
 +</code> 
 + 
 +<code> 
 +$ git stash show stash@{0} 
 + MAINTAINERS | 4 ++++ 
 + README      | 4 ++++ 
 + 2 files changed, 8 insertions(+) 
 +
 +</code> 
 + 
 +Show the actual content with ''-p'': 
 + 
 +<code> 
 +$ git stash show -p 
 +diff --git a/MAINTAINERS b/MAINTAINERS 
 +index 41ce5f4ad838..e0c46b96e2d3 100644 
 +--- a/MAINTAINERS 
 ++++ b/MAINTAINERS 
 +@@ -1,3 +1,7 @@ 
 ++uncached stuff 
 +
 +
 +
 +  
 +  
 +        List of maintainers and how to submit kernel changes 
 +diff --git a/README b/README 
 +index 669ac7c32292..9b80a4811f05 100644 
 +--- a/README 
 ++++ b/README 
 +@@ -1,3 +1,7 @@ 
 ++cached stuff 
 +
 +
 +
 + Linux kernel 
 + ============ 
 + 
 +
 +</code> 
 + 
 +==== git stash pop/apply ==== 
 + 
 +Pop/apply the most recent stash, or a specified stash: 
 + 
 +<code> 
 +$ git stash pop 
 +$ git stash pop stash@{1} 
 +$ git stash apply 
 +</code> 
 + 
 +Use ''%%--%%index'' to restore the cached content in the index: 
 + 
 +<code> 
 +$ git stash pop --index 
 +</code> 
 + 
 +==== Throwing away stashes ==== 
 + 
 +<code> 
 +$ git stash drop 
 +$ git stash drop stash@{1} 
 +$ git stash clear 
 +</code> 
 + 
 +==== Working with pathspecs ==== 
 + 
 +''git stash push'' supports pushing partial changes using a //pathspec//: 
 + 
 +<code> 
 +$ git stash push -- goodstuff/ 
 +</code> 
 + 
 +==== git stash branch ==== 
 + 
 +<code> 
 +Creates and checks out a new branch named <branchname> 
 +starting from the commit at which the <stash> was 
 +originally created, applies the changes recorded in <stash> 
 +to the new working tree and index. If that succeeds, and 
 +<stash> is a reference of the form stash@{<revision>}, it 
 +then drops the <stash>. When no <stash> is given, applies 
 +the latest one. 
 + 
 +This is useful if the branch on which you ran git stash 
 +push has changed enough that git stash apply fails due to 
 +conflicts. Since the stash entry is applied on top of the 
 +commit that was HEAD at the time git stash was run, it 
 +restores the originally stashed state with no conflicts. 
 +</code> 
 + 
 +===== How stashes are implemented ===== 
 + 
 +Stashes are represented by three new commits in the object store, referenced by stash pointers only: 
 + 
 +  * ''stash@{0}'': The final result, both staged and unstaged content 
 +  * ''stash@{0}^1'': The base commit from which the stash is derived 
 +  * ''stash@{0}^2'': Commit representing just staged content 
 + 
 +The //full// content of the stash: 
 + 
 +<code> 
 +$ git diff stash@{0}^1 stash@{0} 
 +diff --git a/README b/README 
 +index 669ac7c32292..9c61fa8595e9 100644 
 +--- a/README 
 ++++ b/README 
 +@@ -1,3 +1,8 @@ 
 ++staged stuff 
 +
 +
 +
 +
 + Linux kernel 
 + ============ 
 +  
 +@@ -16,3 +21,8 @@ several of them using the Restructured Text markup notation. 
 + Please read the Documentation/process/changes.rst file, as it contains the 
 + requirements for building and running the kernel, and information about 
 + the problems which may result by upgrading your kernel. 
 +
 +
 +
 ++unstaged stuff 
 +
 +
 +</code> 
 + 
 +The staged content only: 
 + 
 +<code> 
 +$ git diff stash@{0}^1 stash@{0}^2 
 +diff --git a/README b/README 
 +index 669ac7c32292..ded86dccf25a 100644 
 +--- a/README 
 ++++ b/README 
 +@@ -1,3 +1,8 @@ 
 ++staged stuff 
 +
 +
 +
 +
 + Linux kernel 
 + ============ 
 +  
 +
 +</code> 
 + 
 +Finally, the unstaged content: 
 + 
 +<code> 
 +$ git diff stash@{0}^2 stash@{0} 
 +diff --git a/README b/README 
 +index ded86dccf25a..9c61fa8595e9 100644 
 +--- a/README 
 ++++ b/README 
 +@@ -21,3 +21,8 @@ several of them using the Restructured Text markup notation. 
 + Please read the Documentation/process/changes.rst file, as it contains the 
 + requirements for building and running the kernel, and information about 
 + the problems which may result by upgrading your kernel. 
 +
 +
 +
 ++unstaged stuff 
 +
 +
 +</code>
  • git_stash.1550676932.txt.gz
  • Last modified: 2019/02/20 15:35
  • by rpjday