feature: allow to reset author when --amend is enabled for committing

This commit is contained in:
leo 2025-05-26 12:28:00 +08:00
parent d3bc85418e
commit 0641a22230
No known key found for this signature in database
8 changed files with 38 additions and 12 deletions

View file

@ -4,7 +4,7 @@ namespace SourceGit.Commands
{ {
public class Commit : Command public class Commit : Command
{ {
public Commit(string repo, string message, bool amend, bool signOff) public Commit(string repo, string message, bool signOff, bool amend, bool resetAuthor)
{ {
_tmpFile = Path.GetTempFileName(); _tmpFile = Path.GetTempFileName();
File.WriteAllText(_tmpFile, message); File.WriteAllText(_tmpFile, message);
@ -12,10 +12,10 @@ namespace SourceGit.Commands
WorkingDirectory = repo; WorkingDirectory = repo;
Context = repo; Context = repo;
Args = $"commit --allow-empty --file=\"{_tmpFile}\""; Args = $"commit --allow-empty --file=\"{_tmpFile}\"";
if (amend)
Args += " --amend --no-edit";
if (signOff) if (signOff)
Args += " --signoff"; Args += " --signoff";
if (amend)
Args += resetAuthor ? " --amend --reset-author --no-edit" : " --amend --no-edit";
} }
public bool Run() public bool Run()

View file

@ -781,6 +781,7 @@
<x:String x:Key="Text.WorkingCopy.IncludeUntracked" xml:space="preserve">INCLUDE UNTRACKED FILES</x:String> <x:String x:Key="Text.WorkingCopy.IncludeUntracked" xml:space="preserve">INCLUDE UNTRACKED FILES</x:String>
<x:String x:Key="Text.WorkingCopy.NoCommitHistories" xml:space="preserve">NO RECENT INPUT MESSAGES</x:String> <x:String x:Key="Text.WorkingCopy.NoCommitHistories" xml:space="preserve">NO RECENT INPUT MESSAGES</x:String>
<x:String x:Key="Text.WorkingCopy.NoCommitTemplates" xml:space="preserve">NO COMMIT TEMPLATES</x:String> <x:String x:Key="Text.WorkingCopy.NoCommitTemplates" xml:space="preserve">NO COMMIT TEMPLATES</x:String>
<x:String x:Key="Text.WorkingCopy.ResetAuthor" xml:space="preserve">Reset Author</x:String>
<x:String x:Key="Text.WorkingCopy.ResolveTip" xml:space="preserve">Right-click the selected file(s), and make your choice to resolve conflicts.</x:String> <x:String x:Key="Text.WorkingCopy.ResolveTip" xml:space="preserve">Right-click the selected file(s), and make your choice to resolve conflicts.</x:String>
<x:String x:Key="Text.WorkingCopy.SignOff" xml:space="preserve">SignOff</x:String> <x:String x:Key="Text.WorkingCopy.SignOff" xml:space="preserve">SignOff</x:String>
<x:String x:Key="Text.WorkingCopy.Staged" xml:space="preserve">STAGED</x:String> <x:String x:Key="Text.WorkingCopy.Staged" xml:space="preserve">STAGED</x:String>

View file

@ -785,6 +785,7 @@
<x:String x:Key="Text.WorkingCopy.IncludeUntracked" xml:space="preserve">显示未跟踪文件</x:String> <x:String x:Key="Text.WorkingCopy.IncludeUntracked" xml:space="preserve">显示未跟踪文件</x:String>
<x:String x:Key="Text.WorkingCopy.NoCommitHistories" xml:space="preserve">没有提交信息记录</x:String> <x:String x:Key="Text.WorkingCopy.NoCommitHistories" xml:space="preserve">没有提交信息记录</x:String>
<x:String x:Key="Text.WorkingCopy.NoCommitTemplates" xml:space="preserve">没有可应用的提交信息模板</x:String> <x:String x:Key="Text.WorkingCopy.NoCommitTemplates" xml:space="preserve">没有可应用的提交信息模板</x:String>
<x:String x:Key="Text.WorkingCopy.ResetAuthor" xml:space="preserve">重置提交者</x:String>
<x:String x:Key="Text.WorkingCopy.ResolveTip" xml:space="preserve">请选中冲突文件,打开右键菜单,选择合适的解决方式</x:String> <x:String x:Key="Text.WorkingCopy.ResolveTip" xml:space="preserve">请选中冲突文件,打开右键菜单,选择合适的解决方式</x:String>
<x:String x:Key="Text.WorkingCopy.SignOff" xml:space="preserve">署名</x:String> <x:String x:Key="Text.WorkingCopy.SignOff" xml:space="preserve">署名</x:String>
<x:String x:Key="Text.WorkingCopy.Staged" xml:space="preserve">已暂存</x:String> <x:String x:Key="Text.WorkingCopy.Staged" xml:space="preserve">已暂存</x:String>

View file

@ -785,6 +785,7 @@
<x:String x:Key="Text.WorkingCopy.IncludeUntracked" xml:space="preserve">顯示未追蹤檔案</x:String> <x:String x:Key="Text.WorkingCopy.IncludeUntracked" xml:space="preserve">顯示未追蹤檔案</x:String>
<x:String x:Key="Text.WorkingCopy.NoCommitHistories" xml:space="preserve">沒有提交訊息記錄</x:String> <x:String x:Key="Text.WorkingCopy.NoCommitHistories" xml:space="preserve">沒有提交訊息記錄</x:String>
<x:String x:Key="Text.WorkingCopy.NoCommitTemplates" xml:space="preserve">沒有可套用的提交訊息範本</x:String> <x:String x:Key="Text.WorkingCopy.NoCommitTemplates" xml:space="preserve">沒有可套用的提交訊息範本</x:String>
<x:String x:Key="Text.WorkingCopy.ResetAuthor" xml:space="preserve">重設作者</x:String>
<x:String x:Key="Text.WorkingCopy.ResolveTip" xml:space="preserve">請選擇發生衝突的檔案,開啟右鍵選單,選擇合適的解決方式</x:String> <x:String x:Key="Text.WorkingCopy.ResolveTip" xml:space="preserve">請選擇發生衝突的檔案,開啟右鍵選單,選擇合適的解決方式</x:String>
<x:String x:Key="Text.WorkingCopy.SignOff" xml:space="preserve">署名</x:String> <x:String x:Key="Text.WorkingCopy.SignOff" xml:space="preserve">署名</x:String>
<x:String x:Key="Text.WorkingCopy.Staged" xml:space="preserve">已暫存</x:String> <x:String x:Key="Text.WorkingCopy.Staged" xml:space="preserve">已暫存</x:String>

View file

@ -37,9 +37,11 @@ namespace SourceGit.ViewModels
var log = _repo.CreateLog("Reword HEAD"); var log = _repo.CreateLog("Reword HEAD");
Use(log); Use(log);
var signOff = _repo.Settings.EnableSignOffForCommit;
return Task.Run(() => return Task.Run(() =>
{ {
var succ = new Commands.Commit(_repo.FullPath, _message, true, _repo.Settings.EnableSignOffForCommit).Use(log).Run(); // For reword (only changes the commit message), disable `--reset-author`
var succ = new Commands.Commit(_repo.FullPath, _message, signOff, true, false).Use(log).Run();
log.Complete(); log.Complete();
CallUIThread(() => _repo.SetWatcherEnabled(true)); CallUIThread(() => _repo.SetWatcherEnabled(true));
return succ; return succ;

View file

@ -34,6 +34,7 @@ namespace SourceGit.ViewModels
return Task.Run(() => return Task.Run(() =>
{ {
var signOff = _repo.Settings.EnableSignOffForCommit;
var autoStashed = false; var autoStashed = false;
var succ = false; var succ = false;
@ -52,7 +53,7 @@ namespace SourceGit.ViewModels
succ = new Commands.Reset(_repo.FullPath, Target.SHA, "--soft").Use(log).Exec(); succ = new Commands.Reset(_repo.FullPath, Target.SHA, "--soft").Use(log).Exec();
if (succ) if (succ)
succ = new Commands.Commit(_repo.FullPath, _message, true, _repo.Settings.EnableSignOffForCommit).Use(log).Run(); succ = new Commands.Commit(_repo.FullPath, _message, signOff, true, true).Use(log).Run();
if (succ && autoStashed) if (succ && autoStashed)
new Commands.Stash(_repo.FullPath).Use(log).Pop("stash@{0}"); new Commands.Stash(_repo.FullPath).Use(log).Pop("stash@{0}");

View file

@ -91,6 +91,7 @@ namespace SourceGit.ViewModels
else else
{ {
CommitMessage = string.Empty; CommitMessage = string.Empty;
ResetAuthor = false;
} }
Staged = GetStagedChanges(); Staged = GetStagedChanges();
@ -100,6 +101,12 @@ namespace SourceGit.ViewModels
} }
} }
public bool ResetAuthor
{
get => _resetAuthor;
set => SetProperty(ref _resetAuthor, value);
}
public string Filter public string Filter
{ {
get => _filter; get => _filter;
@ -1717,6 +1724,7 @@ namespace SourceGit.ViewModels
_repo.Settings.PushCommitMessage(_commitMessage); _repo.Settings.PushCommitMessage(_commitMessage);
_repo.SetWatcherEnabled(false); _repo.SetWatcherEnabled(false);
var signOff = _repo.Settings.EnableSignOffForCommit;
var log = _repo.CreateLog("Commit"); var log = _repo.CreateLog("Commit");
Task.Run(() => Task.Run(() =>
{ {
@ -1725,7 +1733,7 @@ namespace SourceGit.ViewModels
succ = new Commands.Add(_repo.FullPath, _repo.IncludeUntracked).Use(log).Exec(); succ = new Commands.Add(_repo.FullPath, _repo.IncludeUntracked).Use(log).Exec();
if (succ) if (succ)
succ = new Commands.Commit(_repo.FullPath, _commitMessage, _useAmend, _repo.Settings.EnableSignOffForCommit).Use(log).Run(); succ = new Commands.Commit(_repo.FullPath, _commitMessage, signOff, _useAmend, _resetAuthor).Use(log).Run();
log.Complete(); log.Complete();
@ -1785,6 +1793,7 @@ namespace SourceGit.ViewModels
private bool _isUnstaging = false; private bool _isUnstaging = false;
private bool _isCommitting = false; private bool _isCommitting = false;
private bool _useAmend = false; private bool _useAmend = false;
private bool _resetAuthor = false;
private bool _hasRemotes = false; private bool _hasRemotes = false;
private List<Models.Change> _cached = []; private List<Models.Change> _cached = [];
private List<Models.Change> _unstaged = []; private List<Models.Change> _unstaged = [];

View file

@ -235,7 +235,7 @@
<v:CommitMessageTextBox Grid.Row="2" ShowAdvancedOptions="True" Text="{Binding CommitMessage, Mode=TwoWay}"/> <v:CommitMessageTextBox Grid.Row="2" ShowAdvancedOptions="True" Text="{Binding CommitMessage, Mode=TwoWay}"/>
<!-- Commit Options --> <!-- Commit Options -->
<Grid Grid.Row="3" Margin="0,6,0,0" ColumnDefinitions="Auto,Auto,*,Auto,Auto,Auto"> <Grid Grid.Row="3" Margin="0,6,0,0" ColumnDefinitions="Auto,Auto,Auto,*,Auto,Auto,Auto">
<CheckBox Grid.Column="0" <CheckBox Grid.Column="0"
Height="24" Height="24"
Margin="1,0,0,0" Margin="1,0,0,0"
@ -256,12 +256,23 @@
ToolTip.Placement="Top" ToolTip.Placement="Top"
ToolTip.VerticalOffset="0"/> ToolTip.VerticalOffset="0"/>
<v:LoadingIcon Grid.Column="2" <CheckBox Grid.Column="2"
Height="24"
Margin="12,0,0,0"
HorizontalAlignment="Left"
IsChecked="{Binding ResetAuthor, Mode=TwoWay}"
IsVisible="{Binding UseAmend}"
Content="{DynamicResource Text.WorkingCopy.ResetAuthor}"
ToolTip.Tip="--reset-author"
ToolTip.Placement="Top"
ToolTip.VerticalOffset="0"/>
<v:LoadingIcon Grid.Column="3"
Width="18" Height="18" Width="18" Height="18"
HorizontalAlignment="Right" HorizontalAlignment="Right"
IsVisible="{Binding IsCommitting}"/> IsVisible="{Binding IsCommitting}"/>
<SplitButton Grid.Column="3" <SplitButton Grid.Column="4"
Content="{DynamicResource Text.Repository.Continue}" Content="{DynamicResource Text.Repository.Continue}"
Height="28" Height="28"
Margin="8,0,0,0" Margin="8,0,0,0"
@ -283,7 +294,7 @@
</SplitButton.Flyout> </SplitButton.Flyout>
</SplitButton> </SplitButton>
<Button Grid.Column="3" <Button Grid.Column="4"
Classes="flat primary" Classes="flat primary"
Content="{DynamicResource Text.WorkingCopy.Commit}" Content="{DynamicResource Text.WorkingCopy.Commit}"
Height="28" Height="28"
@ -316,7 +327,7 @@
</Button> </Button>
<!-- Invisible button just to add another hotkey `Ctrl+Shift+Enter` to commit with auto-stage --> <!-- Invisible button just to add another hotkey `Ctrl+Shift+Enter` to commit with auto-stage -->
<Button Grid.Column="4" <Button Grid.Column="5"
Width="0" Height="0" Width="0" Height="0"
Background="Transparent" Background="Transparent"
Command="{Binding CommitWithAutoStage}" Command="{Binding CommitWithAutoStage}"
@ -329,7 +340,7 @@
</Button.IsEnabled> </Button.IsEnabled>
</Button> </Button>
<Button Grid.Column="5" <Button Grid.Column="6"
Classes="flat" Classes="flat"
Content="{DynamicResource Text.WorkingCopy.CommitAndPush}" Content="{DynamicResource Text.WorkingCopy.CommitAndPush}"
Height="28" Height="28"