交互模式下的“ git stash apply”

卡马羽

我有文件的意甲成藏(stash{0}),我想git apply 只是一些零件/这些文件(通常被称为帅哥交互模式)。

可能吗?

我已经看到可以执行

git stash save -p 'Stash name'

但似乎不可能做到

git stash apply -p 'Stash name'

您知道一种实现方法吗?

里奥·罗切尔

可能吗?

是的!

git checkout -p stash@{0}

您可以0stash@{0}其中用要应用的存储区的索引替换in

使用git stash listgit 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}来自并行分支的存储将尝试还原当前提交和原始分支点之间的所有更改,应用除存储中的更改之外的分支点和另一个分支之间的所有更改) 。

解决方法

有几种解决方法,但都不是适合每种情况的完美解决方案:

    1. 在执行操作时,请务必小心您接受的补丁 git checkout -p stash@{n}
    1. 做一个git stash pop,然后git stash再做一次git checkout -p ...但是,如果您想对存储进行部分应用以避免冲突,那么这将无济于事。在这种情况下,请参阅下面的解决方案4。
    1. 如果您有git支持的图形化差异工具(如meld),则可以仅使用git difftool和“应用左”对您感兴趣的更改:

      • git difftool -d stash@{n} 比较整个存储库及其所有文件

      • git difftool stash@{n} -- path/to/file 比较单个文件

    1. (基于@andrew的回答)在分离的头部上,返回到您感兴趣的存储的“父”提交,应用该存储,仅交互地重新存储您感兴趣的部分,返回并重新应用较小的藏匿处。

一步步:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

git apply stash没有索引号

来自分类Dev

“ git stash apply”或“ git stash pop”是否还会添加修改后的文件以进行提交?

来自分类Dev

在交互模式下运行“ git pull --rebase”?

来自分类Dev

丢弃Git Stash Pop

来自分类Dev

git stash save 做什么 git stash 不做什么,你会在什么情况下使用它?

来自分类Dev

交互模式下的某些选择不适用于git

来自分类Dev

git stash创建和git stash存储的目的是什么?

来自分类Dev

git remove file from stash

来自分类Dev

git stash恢复被忽略的文件

来自分类Dev

git stash在Windows上很慢

来自分类Dev

git stash恢复被忽略的文件

来自分类Dev

Git 不断失去对 stash 的引用

来自分类Dev

如何撤消 git stash --all

来自分类Dev

git stash show -p stash @ {N}和git show stash @ {N}之间的区别?

来自分类Dev

使用git stash分支时找不到stash

来自分类Dev

如何在git add交互式补丁模式下获得更好的帅哥?

来自分类Dev

使用stash和sourcetree进行Git标记

来自分类Dev

IntelliJ IDEA中的Git Stash vs Shelve

来自分类Dev

如何从“ git stash save --all”中恢复?

来自分类Dev

git stash report:''不是隐藏参考

来自分类Dev

如何为多个提交“ git stash”更改?

来自分类Dev

检查“ git stash”是否藏有东西

来自分类Dev

我需要删除我的git stash吗?

来自分类Dev

做`git stash`时保持更改

来自分类Dev

列出分支的git / stash拉取请求

来自分类Dev

git reset stash的语义是什么?

来自分类Dev

由于冲突而无法“ git stash pop”

来自分类Dev

如何为多个提交“ git stash”更改?

来自分类Dev

使用stash和sourcetree进行Git标记