我有文件的意甲成藏(stash{0}
),我想git apply
只是一些零件/这些文件(通常被称为帅哥交互模式)。
可能吗?
我已经看到可以执行
git stash save -p 'Stash name'
但似乎不可能做到
git stash apply -p 'Stash name'
您知道一种实现方法吗?
可能吗?
git checkout -p stash@{0}
您可以0
在stash@{0}
其中用要应用的存储区的索引替换in 。
使用git stash list
,git show -p stash@{n}
如果不确定n
要应用哪个存储区。
不要忘记git stash drop stash@{n}
何时知道不再需要该存储,因为git checkout
显然不会为您删除该存储。
关键是要认识到,存储实质上是对提交的引用,就像标签和分支一样。
实际上,它们存储在中.git/refs/stash
,每个存储散列一行。
就像@mgadda在下面的注释中提到的那样,git checkout -p
尝试应用提交和当前工作空间之间的全部差异。
对于git stash,如果您要应用的stash是针对不同的提交完成的,git checkout -p stash@{n}
则将尝试以交互方式应用所有提交stash@{n}
与当前工作空间的提交之间的差异,包括其所有父提交是不同的。
例如,如果您尝试将“许多次提交”保存的存储区git checkout -p stash@{n}
应用到当前工作空间中,则不仅将尝试应用存储区中的更改,还将尝试还原在存储区之间发生的所有更改。存放所基于的提交和当前提交。
相反,如果您尝试“从将来”应用存储,即到一个分支(该存储是基于该存储的提交之前的多个提交)中,git checkout -p stash@{n}
则将尝试也应用发生的所有其他更改在当前提交和将来提交之间,除了存储自身的更改。
(如果您想知道,git checkout -p stash@{n}
来自并行分支的存储将尝试还原当前提交和原始分支点之间的所有更改,并应用除存储中的更改之外的分支点和另一个分支之间的所有更改) 。
有几种解决方法,但都不是适合每种情况的完美解决方案:
git checkout -p stash@{n}
git stash pop
,然后git stash
再做一次git checkout -p ...
。但是,如果您想对存储进行部分应用以避免冲突,那么这将无济于事。在这种情况下,请参阅下面的解决方案4。如果您有git支持的图形化差异工具(如meld),则可以仅使用git difftool
和“应用左”对您感兴趣的更改:
git difftool -d stash@{n}
比较整个存储库及其所有文件
git difftool stash@{n} -- path/to/file
比较单个文件
一步步:
git checkout stash@{n}^ # notice the "^".
# Now you're in a detached head in the parent commit of the stash.
# It can be applied cleanly:
git stash apply stash@{n}
# Now save only the diffs you're interested in:
git stash -p
# remove the rest of the old stash
git checkout -- . # be careful or you could remove unrelated changes
# go back to the branch where you want to apply the smaller stash
git checkout <my previous branch>
# apply the smaller stash
git stash pop
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句