如何从比较视图中编辑当前修订版和早于最新版本的版本之间的文件的当前修订版?



在Visual Studio中(如果你使用的是git存储库),你可以右键单击修改的文件,然后选择"与未修改的文件进行比较"。在那里,您可以看到一个差异,您可以在其中编辑文件的当前版本。澄清一下:您可以在与最新提交进行比较的差异视图中编辑源文件中当前未提交的更改。相比之下,在差异视图中比较 2 个提交只会显示临时文件夹中这些文件的只读副本,您无法编辑。

但是,当您查看当前修订版和某些旧修订版之间的差异时(通过按住 Ctrl 单击选择顶部提交和旧版本之一,然后在右键单击菜单中选择"比较提交..."),您无法编辑当前修订版中的文件。

有没有办法在将任何旧版本(不仅仅是以前的版本)与当前版本进行比较时,在Visual Studio的差异视图中编辑当前修订版文件?


旁注:开发人员讨厌的一个奇怪技巧是使用"保留更改"重置到所需的旧版本并进行提交,从而可以"与未修改的比较",就好像它是以前的提交一样。但这是笨拙和不可取的。

不幸的是,从VS 2017 Git History工具窗口比较两个版本时,即使其中一个版本是当前的工作版本,目前不支持此功能。 我们目前也无法从"更改"页面选择用于执行差异的特定版本。 我会把它添加到我们的积压工作中,以考虑未来的Visual Studio版本。

正如你所注意到的,差异有时可以从团队资源管理器中的"Git 更改"页进行编辑。 下面总结了我们如何确定差异窗口是否可编辑。

  • 仅工作目录更改: Diff workdir
    • with HEAD,workdir 内容可在 diff 中编辑。
  • 仅限分阶段更改:
    • 使用 HEAD 比较工作目录(因为工作目录内容与索引匹配),工作目录内容可编辑,对工作目录的更改不会自动暂存。
  • 分期和工作目录更改:
    • 使用 HEAD 暂存的差异,暂存内容是只读的。
    • 比较带有索引(暂存)的工作目录,工作目录内容是可编辑的。

希望这有帮助,并感谢您提出这个问题。

首先,确保使用(最新的 2.41 或更高版本,2018 年 2 月)Visual Studio:问题 1454 报告"与未修改比较"之前存在一些问题。

其次,"与未修改比较"相当于一个git diff HEAD(参见"git diff HEAD--staged之间的区别")

这就是为什么"黑客"是"通过"保留更改"重置到所需的旧版本并进行提交":HEAD 被重置为反映旧提交的提交,而您的本地更改仍然存在,从而启用"与未修改比较"功能。
虽然"笨拙且不受欢迎",但在Visual Studio中(而不是切换到命令行)时,使用较旧的提交来模拟该功能是一种

。也许另一种方法是在旧提交上创建和签出一个新分支。正如"为什么 git 在我切换分支(修改、添加、删除的文件)时不断显示我的更改,无论我是否运行 git add ?"中所述,您当前的更改应该保留,但 HEAD 会更改为旧提交,再次允许"与未修改比较"。


OP补充说:

相比之下,在差异视图中比较 2 个提交只会显示临时文件夹中这些文件的只读副本,您无法编辑。

比较两个旧版本不允许编辑是有意义的:您将在哪里应用这些更改?

最好在其中一个版本上创建一个新分支,然后与另一个提交进行比较。

最新更新