Visual Studioで編集していると、ファイルの変更履歴として黄色や緑のバーが表示されます。
この変更履歴をリセットする方法が意外にも用意されていません。
一応方法としては、
ファイルを開き直す、変更履歴の設定をON/OFFする
探していたらVisualCommanderでこの機能のコマンドが公開されていました。
How to reset track changes in Visual Studio? - Stack Overflow
Visual Commander - Visual Studio Marketplace
https://vlasovstudio.com/visual-commander/commands.html#ClearChanges
ただ、古いバージョンでしか動かないコードだったので、
VS2022で動作するように修正しました。
using EnvDTE80; using System; using System.Runtime.InteropServices; using Microsoft.VisualStudio; using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; public class C :VisualCommanderExt.ICommand { public void Run( DTE2 DTE, Package package ) { serviceProvider = package; Reload( DTE.ActiveDocument.FullName ); } private void Reload( string file ) { ThreadHelper.ThrowIfNotOnUIThread(); var rdt = (IVsRunningDocumentTable)serviceProvider.GetService( typeof( SVsRunningDocumentTable ) ); IVsHierarchy h; uint id; IntPtr data; uint cookie; ErrorHandler.ThrowOnFailure( rdt.FindAndLockDocument( (uint)_VSRDTFLAGS.RDT_NoLock, file, out h, out id, out data, out cookie ) ); try { var persistDocData = (IVsPersistDocData)Marshal.GetObjectForIUnknown( data ); { int dirty; ErrorHandler.ThrowOnFailure( persistDocData.IsDocDataDirty( out dirty ) ); if( dirty != 0 ) return; } ErrorHandler.ThrowOnFailure( persistDocData.ReloadDocData( (uint)_VSRELOADDOCDATA.RDD_RemoveUndoStack ) ); } finally { Marshal.Release( data ); } } private IServiceProvider serviceProvider; }
追加するコマンドの [References..] に1つ追加します。
Microsoft.VisualStudio.Shell.Framework
こんな感じ
以上です。
最新のVS2022だと変更記録の表示がGitの履歴になってしまうから使うかな?