只用Git修改多个文件中的一个文件?
我怎样才能隐藏我的分支上多个已更改文件中的一个?
警告
正如在评论中指出的那样,这将所有东西放入存储器中,不论是上演还是未上架。 - 保持索引仅在索引完成后离开索引。 当您稍后弹出藏匿处时,这可能会导致合并冲突。
这会隐藏您以前没有添加过的所有内容。 只要git add
你想保留的东西,然后运行它。
git stash --keep-index
例如,如果您想将旧提交拆分为多个变更集,则可以使用以下过程:
git rebase -i <last good commit>
edit
。 git reset HEAD^
git add <files you want to keep in this change>
git stash --keep-index
git add
任何更改。 git commit
git stash pop
git rebase --continue
你也可以使用git stash save -p "my commit message"
。 通过这种方式,您可以选择应该添加哪些区块来存储,还可以选择整个文件。
系统会提示您为每个人做一些操作:
y - stash this hunk
n - do not stash this hunk
q - quit; do not stash this hunk or any of the remaining ones
a - stash this hunk and all later hunks in the file
d - do not stash 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
由于git基本上是管理所有存储库内容和索引(而不是一个或多个文件),所以git stash
与所有工作目录交易,并不令人意外。
实际上,自从Git 2.13(2017年第2季度)以来,您可以隐藏单个文件:
git stash push [--] [<pathspec>...]
有关更多信息,请参阅“隐藏对特定文件的更改”。
原来的答案(下面,2010年6月)是关于手动选择你想存储的东西。
Casebash评论道:
这( stash --patch
原始解决方案)很好,但我经常修改了很多文件,所以使用补丁很烦人
bukzor的回答(upvoted,2011年11月)提出了一个更实用的解决方案,基于
git add
+ git stash --keep-index
。
去看看并提出他的答案,这应该是官方的答案(而不是我的答案)。
关于该选项,chhh在评论中指出了另一种工作流程:
你应该在这样一个git reset --soft
之后“ git reset --soft
”来清除你的清理:
为了达到原始状态 - 这是一个清晰的临时区域,只有一些选择性的非阶段性修改,可以轻松地重置索引以获得(不需要做任何类似bukzor的事情)。
(原始答案2010年6月:手动藏匿)
然而, git stash save --patch
可以让你实现部分git stash save --patch
:
使用--patch
,您可以交互式地从HEAD和正在运行的树之间的差异中选择要隐藏的块。
存储条目的构建方式使其索引状态与存储库的索引状态相同,其工作树仅包含交互式选择的更改。 所选的更改将从您的工作树中回滚。
但是,这将保存完整的索引(可能不是您想要的索引,因为它可能包含已经索引的其他文件)以及部分工作树(可能看起来像要存储的文件)。
git stash --patch --no-keep-index
可能更适合。
如果 - --patch
不起作用,手动过程可能会:
对于一个或多个文件,中间解决方案将是:
(实际上,eleotlecram提出了一个有趣的选择)
git stash
git stash
#这次,只有你想要的文件被隐藏 git stash pop stash@{1}
#重新应用所有文件修改 git checkout -- afile
#在任何本地修改之前将文件重置为HEAD内容 在那个繁琐的过程结束时,你将只有一个或几个文件被隐藏。
链接地址: http://www.djcxy.com/p/609.html上一篇: Stash only one file out of multiple files that have changed with Git?