我怎样才能只申请一些git藏匿?

Ros*_*one 26 git

我想将一个git stash中的一些更改应用于一个提交,其余的更改应用于另一个提交.

小智 35

git checkout stash@{0} -- <filename>
Run Code Online (Sandbox Code Playgroud)

对每个提交以及与每个提交相关的所有文件名执行两次此操作.您可以为列表或文件名的全局代码执行此操作.

  • 如果存储是从较早的提交中进行的,则 checkout 是错误的。 (5认同)
  • 还请分享为什么需要做两次? (2认同)

Dmi*_*sky 10

看起来你可以使用git checkout -p藏匿参考,比如 stash@{0}.这将允许您从存储中逐个选择要应用于工作树的内容.

使用完毕后git checkout -p,您接受的更改将应用​​于您的工作树并添加到缓存/索引中,准备提交.您可以git checkout -p stash@{0}多次使用,选择所需的修补程序,并在此过程中多次提交.


ale*_*lex 7

解开藏匿......

git stash pop
Run Code Online (Sandbox Code Playgroud)

... git add在补丁模式中使用...

git add -p
Run Code Online (Sandbox Code Playgroud)

......然后承诺......

git commit -m "Partial stashed commit"
Run Code Online (Sandbox Code Playgroud)

这是很快没有阅读文档的问题.Leo的答案有更好的方法来实现这一目标.

  • 您还可以重新存储未分级的更改,但保留索引. (3认同)

Mor*_*ort 6

仅为要更改的文件应用修补程序.

git show stash@{0} -- <file(s) in question> | git apply
Run Code Online (Sandbox Code Playgroud)

  • 我认为默认输出已更改,因为您现在需要指定 `-m` 选项(`git show -m stash...`)来输出 `git apply` 理解的差异。没有它,我从`git apply`得到了`error: unrecognized input`。 (3认同)
  • @Cilyan 我已经重现了该错误。存储现在保存为合并提交,似乎并产生“组合差异”。如果我将 `--first-parent` 添加到 show 命令中,它会再次起作用。答案已更新。 (2认同)