Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ===== Overview ===== 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'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> git_stash.txt Last modified: 2019/02/26 19:18by rpjday