切换分支并只进行特定更改

Switch branches and take only specific changes with you

我对 Git 的思维方式还很陌生,我几乎完全通过 VSCode GUI 和 Github 桌面应用程序使用它,所以请耐心等待如果我的想法或术语是倒退的或横向的。

我经常发现自己在做一些工作的情况下,然后意识到我刚刚完成的一些工作应该在与我所在的不同的分支中完成,并且需要将这些更改移动到另一个分支。但这仅适用于当前分支中的一些更改——分支中的其余更改确实属于它们所在的位置,并且应该保留在原处。通常它只是我想移动的一小部分文件,而也许 40 或 50 个文件应该保留在原处。

有很多关于如何更改分支并将所有未提交的更改移动到另一个分支的问题和教程;我还可以找到关于如何从现有提交中挑选的问题(比如 this one – 但是 Google 我可能找不到任何关于如何仅移动 具体的描述,选择的、未提交的更改 到不同的分支。也就是说,

我可以手动挑选文件(逐个文件),或者我可以暂存或取消暂存我想要移动或不移动的特定更改;任何一种方式都适合我(或者如果有另一种方式,那也很好)。

理论上,我想我应该能够在当前分支 中存储更改,不包括 我想移动的文件,然后切换到另一个分支。我找到了 how to stash specific files 的描述,但不是相反的方法,存储所有 除了 特定文件。

有没有一些相对简单的方法可以做到这一点?

当然,一如既往,在此处发布后我立即想到了一个解决方案……很可能不是最好或最简单的方法,但它确实有效。

它可以通过几个相对简单的步骤结合暂存和存储来完成:

  1. 暂存您想要转移到另一个分支的更改
  2. 使用 git stash -ku 存储未暂存的更改(k 用于保持索引,limits it to unstaged changesu 用于包含未跟踪的文件)
  3. 切换到你想要的分支并提交更改
  4. 切换回您所在的分支并 apply/pop 您的存储 git stash apply git stash pop

由于我不太明白的原因,当我应用我的存储时,暂存的更改也再次出现,但由于它们现在已在另一个分支中提交,我可以在当前分支中取消暂存并丢弃它们。