User Tools

Site Tools


git_stash

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
git_stash [2019/02/20 17:05]
rpjday [git stash pop/apply]
git_stash [2019/02/26 19:18]
rpjday [git stash branch]
Line 19: Line 19:
 </​code>​ </​code>​
  
-===== git stash push =====+===== Basic stash operations ===== 
 + 
 +==== git stash push ====
  
 Save both the unstaged and staged content in a new stash: Save both the unstaged and staged content in a new stash:
Line 42: Line 44:
   * ''​%%--%%all'':​ Stash //all// untracked files, including ignored ones, then clean   * ''​%%--%%all'':​ Stash //all// untracked files, including ignored ones, then clean
  
-===== git stash show =====+==== git stash show ====
  
 By default, show most recent stash: By default, show most recent stash:
Line 93: Line 95:
 </​code>​ </​code>​
  
-===== git stash pop/​apply ​=====+==== git stash pop/apply ====
  
 Pop/apply the most recent stash, or a specified stash: Pop/apply the most recent stash, or a specified stash:
Line 109: Line 111:
 </​code>​ </​code>​
  
-===== Throwing away stashes ​=====+==== Throwing away stashes ====
  
 <​code>​ <​code>​
Line 117: Line 119:
 </​code>​ </​code>​
  
-===== Working with pathspecs ​=====+==== Working with pathspecs ====
  
 ''​git stash push''​ supports pushing partial changes using a //​pathspec//:​ ''​git stash push''​ supports pushing partial changes using a //​pathspec//:​
Line 125: Line 127:
 </​code>​ </​code>​
  
-===== git stash branch ​=====+==== git stash branch ====
  
 <​code>​ <​code>​
Line 141: Line 143:
 commit that was HEAD at the time git stash was run, it commit that was HEAD at the time git stash was run, it
 restores the originally stashed state with no conflicts. 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>​ </​code>​
git_stash.txt · Last modified: 2019/02/26 19:18 by rpjday