我正在试图找出如何在许多未提交的更改中存储两个特定文件。
这个非常有前途的答案,Stash only one file out of multiple files that have changed with Git?,没有显示用法,我无法解决问题。
以下不起作用,手册页不是很有帮助(它似乎谈论终端输出,而不是实际存储)。我想隐藏application.conf
和plugins.sbt
,然后提交其他所有内容。
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
答案 0 :(得分:25)
使用
git stash --patch
然后,对于您可能提交的每个块,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,?]?
一个hunk是一个连贯的线条差异,因为git-diff会产生它。要选择单个文件,只要您到达该文件,就必须d
ecline添加帅哥,然后您可以从该文件中添加a
ll帅哥。
您还可以通过y
es回答问题来选择单个大块头。如果大块似乎太大,你甚至可能会s
。也可以e
dit当前的大块。
可以在不同的git命令(f.e。--patch
,stash
和commit
)上使用add
- 选项。
这是--patch
- 函数的详细解释,我从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
答案 1 :(得分:6)
不带参数使用git stash -p
。然后,您将能够以交互方式选择要隐藏的更改:
diff --git a/test b/test
index acbd8ae..662d47a 100644
--- a/test
+++ b/test
@@ -10,6 +10,7 @@ test
(...)
+ test
(...)
Stash this hunk [y,n,q,a,d,/,e,?]?
不幸的是,它不可能选择文件,只有帅哥。
答案 2 :(得分:1)
在最新版本的Git(&gt; v2.13)中,您可以使用
暂存要隐藏的特定文件git stash push -- <pathspec>
例如,如果您要存储要隐藏的特定文件,则可以使用此命令专门存储这些文件:
git stash push -- example/file/path/and/file.html
您可以使用通配模式隐藏路径中的特定文件
来节省一些输入git stash push -- **/path/**
您只想暂存要隐藏的文件,因为任何其他暂存文件都会被特定文件存储,但在存储后也会暂停,所以如果git stash pop
您会收到冲突。