I’m trying to figure out how to stash two specific files among many uncommitted changes.
This very promising answer, Stash only one file out of multiple files that have changed with Git?, doesn’t show the usage and I’m having trouble working it out.
The following doesn’t work and the man page isn’t very helpful (it appears to talk about terminal output, not actually stashing). I want to stash
plugins.sbt and then commit everything else.
app (master)$ git status On branch master Your branch is ahead of 'origin/master' by 29 commits. (use "git push" to publish your local commits) Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: views/mobile/blog.scala.html modified: views/mobile/slideshow.scala.html modified: ../public/css/mobile/styles.css Unmerged paths: (use "git reset HEAD <file>..." to unstage) (use "git add <file>..." to mark resolution) both modified: ../conf/application.conf Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: ../project/plugins.sbt app (master)$ git stash -p ../conf/application.conf ../project/plugins.sbt usage: git stash list [<options>] or: git stash show [<stash>] or: git stash drop [-q|--quiet] [<stash>] or: git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>] or: git stash branch <branchname> [<stash>] or: git stash [save [--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [<message>]] or: git stash clear
git stash --patch
git will then show a dialog like the following, for every hunk in your possible commit:
diff --git files over files index e69de29..ac4f3b3 100644 --- a/file.txt +++ b/file.txt @@ -0,0 +1 @@ +you did awesome stuff! Stash this hunk [y,n,q,a,d,/,e,?]?
A hunk is a coherent diff of lines as git-diff produces it. To select a single file you’ll have to
decline adding hunks as long as you reach that file, then you might add
all hunks from that file.
You’re also able to choose a single hunk by answering the question with
yes. If the hunk seems to be too big, you even might
split it. It is also possible to
edit the current hunk.
--patch-option is possible on different git commands (f.e.
This is the detailed explanation of the
--patch-function, which i grabbed from the developers documentation:
This lets you choose one path out of a 'status' like selection. After choosing the path, it presents the diff between the index and the working tree file and asks you if you want to stage the change of each hunk. You can select one of the following options and type return: y - stage this hunk n - do not stage this hunk q - quit; do not stage this hunk or any of the remaining ones a - stage this hunk and all later hunks in the file d - do not stage this hunk or any of the later hunks in the file g - select a hunk to go to / - search for a hunk matching the given regex j - leave this hunk undecided, see next undecided hunk J - leave this hunk undecided, see next hunk k - leave this hunk undecided, see previous undecided hunk K - leave this hunk undecided, see previous hunk s - split the current hunk into smaller hunks e - manually edit the current hunk ? - print help
Answered By – Florian Neumann