ファイル全体ではなく、ファイル内のコードをステージングする方法はありますか?
これが可能かどうか疑問に思うだけです。
Visual Studio 2015、TFS 2015(Git)を使用します。
いいえ、Visual Studio 2015も2017もステージングハンク(部分ファイル)をサポートしていません。これらの部分的な変更をステージングするには、別のクライアントを使用する必要があります。
ステージングハンクはクライアント機能であり、それをサポートするクライアントはハンクのステージングに使用できます。コマンドラインまたはTowerやSourceTreeなどのサードパーティのクライアントが対応します。ステージングが完了すると、ステージングされた変更のコミットは、Visual Studioまたは変更をコミットできる他のクライアント(ほとんどすべてのgitクライアントになります)を使用して実行できます。
ハンクがステージングされると、Visual Studioはファイルを「Staged」および「Unstaged」として表示します。ステージングされたファイルには、ステージングしたハンクが含まれています。ステージングされていないファイルには、ステージングしていないハンクが含まれています。コミットすると、ステージングされたハンクがコミットされます。このサイクルは何度でも繰り返すことができます。
@tomossiusは、git add interactiveコマンドを使用して、コマンドラインツールを使用してファイルを部分的にステージングする方法の例を尋ねました。もっとエレガントな方法があるかもしれませんが、これは私がそれを行う方法です。
それにもかかわらず、単純なケースを実行します。
コマンドは
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>>
このファイルが選択されていることを示す*を使用して、Enterキーを押すだけでパッチ適用プロセスを開始できます。
この時点で、個々のチャンクを段階的に指定するよう求められます。
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のステージングエリアとステージングされていないエリアにファイルが表示されます。ステージングした変更はそのファイルにあり、ノーと言った変更はステージングされていない領域にあります。
GitToolsには最高のGuiはありませんが、何もないよりはましです。詳細モード(ファイルリストの上にあるチェックボックス)では、選択した行をステージングまたはリセットできます。 https://marketplace.visualstudio.com/items?itemName=yysun.GitTools
ファイルの部分的なステージングにソースツリーを使用できます。チームエクスプローラーを使用してVisual Studioからコミットすると、すべての変更がソースツリーに反映されます。