如何在不覆盖更改集中的文件更改的情况下撤消 VS 中的暂存更改?

How can I undo Staged Changes in VS, without overwriting file changes in the Changes set?

我有一个使用 git 的 Visual Studio 项目。在 Team Explore>Changes window 中,我在 "Staged Changes" 区域进行了一系列更改。问题是这些旧的、分阶段的更改不再与 "Changes" 区域中完成的工作兼容。

在 "Staged Changes" 区域,Visual Studio 只给了我一个 Unstage 的选项,它将把暂存的变更合并到另一个变更集中。然而,这不是我想要做的。

如何在提交之前丢弃所有暂存更改但保留所有更改?或者,我如何才能只提交 "Changes" 集中的更改,而不提交暂存中的内容?如果可以的话,我可以在提交后删除暂存中的内容。

我猜你在这里提到了相同的分支提交。因此,您在本地提交了本地更改,这些更改从未被推送到 .现在 remote 在此分支上有一些更新,您希望在不丢失本地提交的情况下进行更新。

示例: 如果当前分支是 featureA,您在本地有 staged changes 并且 featureA <remote> 有您想要合并的更新而不丢失您的代码在本地更改。

如果是这种情况,请在您本地的当前分支之上创建另一个分支。

git checkout -b featureB 因此,featureB 包含您在 featureA 分支上本地进行的所有提交。

现在git checkout featureA

git reset --hard origin/featureA 注意: 这将重置您的本地 featureA 以匹配 remote。所以它删除了这个分支 featureA 上的本地提交更改,但是 featureB 将保持不变。

现在您以后可以随时在本地结帐到 featureB 并在那里进行更改。

如果您希望这些提交中的任何一个在将来用于 featureA,请使用 cherry-pick

git cherry-pick <commit-hash> 这将在 featureA 上创建您提到的任何提交哈希的提交。如果您有 n 个要从 feartureB 实施的提交哈希。对 featureA

上的所有 n 提交执行此操作

取消暂存文件暂存更改时的“更改”页面行为取决于该文件是否也有仅工作目录更改。

如果文件只有暂存更改,取消暂存将从索引中删除这些更改,但保留文件的内容在 workdir 版本中。然后,您可以 select 同一个文件并撤消 workdir 更改以返回到文件内容的最后提交版本。

如果文件同时更改了 staged 和 workdir,取消暂存文件将丢弃索引(暂存)版本,只保留文件的 workdir 版本。

希望对您有所帮助。