diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml index 836d56d5..bb89c21d 100644 --- a/src/Resources/Locales/en_US.axaml +++ b/src/Resources/Locales/en_US.axaml @@ -58,6 +58,7 @@ Fetch ${0}$ into ${1}$... Git Flow - Finish ${0}$ Merge ${0}$ into ${1}$... + Merge selected {0} branches Pull ${0}$ Pull ${0}$ into ${1}$... Push ${0}$ diff --git a/src/ViewModels/Repository.cs b/src/ViewModels/Repository.cs index 38855fef..d593171e 100644 --- a/src/ViewModels/Repository.cs +++ b/src/ViewModels/Repository.cs @@ -13,6 +13,7 @@ using Avalonia.Media.Imaging; using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; +using SourceGit.Models; namespace SourceGit.ViewModels { @@ -950,6 +951,12 @@ namespace SourceGit.ViewModels PopupHost.ShowPopup(new DeleteMultipleBranches(this, branches, isLocal)); } + public void MergeMultipleBranches(List branches) + { + if (PopupHost.CanCreatePopup()) + PopupHost.ShowPopup(new MergeMultiple(this, branches.ConvertAll(b => _histories?.Commits?.Find(c => c.SHA == b.Head)))); + } + public void CreateNewTag() { if (_currentBranch == null) diff --git a/src/Views/BranchTree.axaml.cs b/src/Views/BranchTree.axaml.cs index 92c2b043..d9588a0f 100644 --- a/src/Views/BranchTree.axaml.cs +++ b/src/Views/BranchTree.axaml.cs @@ -405,6 +405,17 @@ namespace SourceGit.Views ev.Handled = true; }; menu.Items.Add(deleteMulti); + + var mergeMulti = new MenuItem(); + mergeMulti.Header = App.Text("BranchCM.MergeMultiBranches", branches.Count); + mergeMulti.Icon = App.CreateMenuIcon("Icons.Merge"); + mergeMulti.Click += (_, ev) => + { + repo.MergeMultipleBranches(branches); + ev.Handled = true; + }; + menu.Items.Add(mergeMulti); + menu?.Open(this); } }