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 16:47] – [SYNOPSIS] rpjdaygit_stash [2019/02/26 19:18] (current) – [git stash branch] rpjday
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 32: Line 34:
 $ git stash list $ git stash list
 stash@{0}: WIP on master: 40e196a906d9 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 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't
 +  * ''%%--%%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> </code>
  • git_stash.1550681227.txt.gz
  • Last modified: 2019/02/20 16:47
  • by rpjday