diff --git a/GitUI/CommandsDialogs/FormCommit.cs b/GitUI/CommandsDialogs/FormCommit.cs index 196ab938ca8..f8cb626281c 100644 --- a/GitUI/CommandsDialogs/FormCommit.cs +++ b/GitUI/CommandsDialogs/FormCommit.cs @@ -2129,6 +2129,7 @@ private void ResetFilesClick(object sender, EventArgs e) bool deleteNewFiles = _currentFilesList.SelectedItems.Any(item => DeletableItem(item)) && (resetType == FormResetChanges.ActionEnum.ResetAndDelete); List filesInUse = new(); List filesToReset = new(); + List conflictsToReset = new(); StringBuilder output = new(); foreach (var item in _currentFilesList.SelectedItems) { @@ -2162,6 +2163,10 @@ private void ResetFilesClick(object sender, EventArgs e) { filesToReset.Add(item.Item.OldName); } + else if (item.Item.IsConflict) + { + conflictsToReset.Add(item.Item.Name); + } else if (!item.Item.IsNew) { filesToReset.Add(item.Item.Name); @@ -2169,6 +2174,14 @@ private void ResetFilesClick(object sender, EventArgs e) } output.Append(Module.ResetFiles(filesToReset)); + if (conflictsToReset.Count > 0) + { + // Special handling for conflicted files, shown in worktree (with the raw diff). + // Must be reset to HEAD as Index is just a status marker. + ObjectId headId = Module.RevParse("HEAD"); + Module.CheckoutFiles(conflictsToReset, headId, force: false); + } + toolStripProgressBar1.Value = toolStripProgressBar1.Maximum; toolStripProgressBar1.Visible = false; diff --git a/GitUI/CommandsDialogs/RevisionDiffControl.cs b/GitUI/CommandsDialogs/RevisionDiffControl.cs index 7768bcd5016..7310437f0eb 100644 --- a/GitUI/CommandsDialogs/RevisionDiffControl.cs +++ b/GitUI/CommandsDialogs/RevisionDiffControl.cs @@ -536,10 +536,18 @@ private void ResetSelectedItemsTo(bool actsAsChild, bool deleteUncommittedAddedI foreach (ObjectId parentId in selectedItems.FirstIds()) { List itemsToCheckout = selectedItems - .Where(item => !item.Item.IsNew && item.FirstRevision?.ObjectId == parentId) + .Where(item => !item.Item.IsNew && !(item.Item.IsConflict && parentId == ObjectId.IndexId) && item.FirstRevision?.ObjectId == parentId) .Select(item => RenamedIndexItem(item) ? item.Item.OldName : item.Item.Name) .ToList(); Module.CheckoutFiles(itemsToCheckout, parentId, force: false); + + // Special handling for conflicted files, shown in worktree (with the raw diff). + // Must be reset to HEAD as Index is just a status marker. + List conflictsToCheckout = selectedItems + .Where(item => item.Item.IsConflict && parentId == ObjectId.IndexId) + .Select(item => RenamedIndexItem(item) ? item.Item.OldName : item.Item.Name) + .ToList(); + Module.CheckoutFiles(conflictsToCheckout, _revisionGrid.CurrentCheckout, force: false); } } }