【问题标题】:Partially stage files with Visual Studio使用 Visual Studio 部分暂存文件
【发布时间】:2016-12-19 15:09:09
【问题描述】:

有没有办法只在文件中暂存代码片段而不是整个文件?

只是想知道这是否可能。

使用 Visual Studio 2015、TFS 2015 (Git)。

【问题讨论】:

  • 在 Visual Studio Code 中非常简单:stackoverflow.com/a/34736732/8534588
  • 在 VS 2019 中本机仍然不可能,但可以在 Git GUI (Stage Hunk for Commit) 和 Visual Studio Code (Stage Selected Ranges) 中完成。您甚至可以在 VS 2019(用于主要开发)和 Git GUI 或 VS Code(用于 git)中打开项目。

标签: git visual-studio-2015 tfs-2015


【解决方案1】:

2022

Visual Studio 2022 最近引入了暂存行和块! 见:

线路分段(交互式分段)

Line-staging 支持,也称为交互式 staging 是我们最受欢迎的 Git 建议票之一。当您需要在不同的提交之间拆分更改时,行分段会很有帮助。此预览版包含一些我们仍在努力增强的 Line-staging 功能。启用此早期版本的线路分段支持的最简单方法是使用 CTRL+Q,键入“preview”并打开预览功能窗格。滚动到“启用线路分段支持”并切换复选框。

注意:line-staging 仍然是一个预览功能

此功能仍是预览功能,这意味着我们正在努力在即将发布的版本中添加更多支持。与此同时,我们将根据您的反馈和社区来构建您需要的东西

打开行暂存预览标志并重新启动 Visual Studio 后,您可以通过单击 Git 更改窗口中的文件开始暂存更改块。然后将鼠标悬停在您要暂存的代码部分上,然后单击阶段更改。

提示:在您喜欢的差异布局中使用 line-staging

内联和并排 diff 模式均支持行分段: 图像在行视图中暂存一个块

此早期版本的线路分段支持存在许多已知问题和限制。

已知问题:

  • 缺少在更改的块或部分中暂存特定行的能力
  • 无法暂存文档中第一行和最后三行代码的行

即将推出的功能:

  • 能够直接从编辑器暂存代码行和代码块
  • 能够取消暂存代码行和代码块
  • 刷新延迟增强

2019 年及以下

不,Visual Studio 2015、2017 和 2019 都不支持暂存块(部分文件)。您需要使用另一个客户端来暂存这些部分更改。

Staging hunk 是一个客户端功能,任何支持它的客户端都可以用来创建一个hunk。命令行或像 Tower 或 SourceTree 这样的 3rd 方客户端都可以。暂存后,可以使用 Visual Studio 或任何其他可以提交更改的客户端(这几乎是所有 git 客户端)来提交暂存的更改。

暂存大块后,Visual Studio 会将文件显示为“暂存”和“未暂存”。暂存文件包含您暂存的块。未暂存的文件包含您尚未暂存的大块。当您提交时,将提交分阶段的大块。您可以根据需要多次重复此循环。

【讨论】:

  • 请注意,Visual Studio 确实使用与命令行 Git 相同的索引(在早期版本中实际上并非如此),因此您可以部分使用暂存文件命令行(或其他工具)并仍然从 Visual Studio 提交这些分阶段的更改。
  • 如果有人对如何使用命令行部分暂存文件然后从 Visual Studio 提交的说明或示例有任何指示,我们将不胜感激。
  • 我使用 SourceTree 来索引我需要的部分块,然后在 Visual Studio 中完成其余的选择和提交(VS 理解并在两次修改中拆分文件)。
  • 在 Visual Studio 2019 中也不可能。提供此功能的其他客户端包括 Git GUIVisual Studio Code
  • 这个 staging hunks 功能是我没有完全离开 SourceTree 的原因。
【解决方案2】:

@tomossius 询问了一个示例,说明如何使用 git add 交互式命令使用命令行工具部分暂存文件。可能有一种更优雅的方式,但这就是我的做法。

Git manual reference - Interactive Staging

不过,我还是会介绍一个简单的案例。

命令是

git add -i stagepartialfile.cs

然后你会收到一个菜单提示

           staged     unstaged path
  1:    unchanged      +30/-30 stagepartialfile.cs

*** Commands ***
  1: status       2: update       3: revert       4: add untracked
  5: patch        6: diff         7: quit         8: help
What now>

从这里你可以选择 5 或 p 作为补丁。

What now> 5
           staged     unstaged path
  1:    unchanged      +30/-30 stagepartialfile.cs
Patch update>>

Git 提示您选择要修补的文件。在这种情况下,我们输入 1 来选择我们指定的文件。

Patch update>> 1
           staged     unstaged path
* 1:    unchanged      +30/-30 stagepartialfile.cs
Patch update>>

用*表示这个文件被选中,我们可以简单地按回车开始修补过程。

此时,系统会提示您暂存每个单独的块。

diff --git a/stagepartialfile.cs b/stagepartialfile.cs
index ea97bc6..d55218c 100644
--- a/stagepartialfile.cs
+++ b/stagepartialfile.cs
@@ -1,4 +1,5 @@
using System;
+using System.Configuration;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net;
Stage this hunk [y,n,q,a,d,/,j,J,g,e,?]? 

按 ?我们可以得到命令列表

y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help

您可以在此处选择要暂存的块,方法是使用 y 或 n 或 s 将其拆分为更小的块。

完成此操作后,您将在 Visual Studio 中的暂存区域和未暂存区域中看到该文件。您暂存的更改将在该文件中,而您拒绝的更改将在未暂存区域中。

【讨论】:

  • 我认为“更优雅”的路线只是git add -p,它只是有点削减了菜单。
  • 另请注意,如果文件数超过几(3?)个,git add -i 会失败
【解决方案3】:

GitTools 没有最好的 Gui,但总比没有好。在高级模式(文件列表上方的复选框)中,您可以暂存或重置选定的行。 https://marketplace.visualstudio.com/items?itemName=yysun.GitTools

【讨论】:

    【解决方案4】:

    可以使用源代码树在文件中进行部分暂存。如果您使用团队资源管理器从 Visual Studio 提交,所有更改都将反映在源代码树中。

    【讨论】:

      猜你喜欢
      • 2021-07-23
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 2018-09-16
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      相关资源
      最近更新 更多