feature: supports to overwrite existing branch while creating new branch (#1349)

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo 2025-05-23 11:27:45 +08:00
parent 594ffc0d1a
commit 76a197aae7
No known key found for this signature in database
9 changed files with 74 additions and 36 deletions

View file

@ -1,4 +1,6 @@
namespace SourceGit.Commands
using System.Text;
namespace SourceGit.Commands
{
public static class Branch
{
@ -11,12 +13,20 @@
return cmd.ReadToEnd().StdOut.Trim();
}
public static bool Create(string repo, string name, string basedOn, Models.ICommandLog log)
public static bool Create(string repo, string name, string basedOn, bool force, Models.ICommandLog log)
{
var builder = new StringBuilder();
builder.Append("branch ");
if (force)
builder.Append("-f ");
builder.Append(name);
builder.Append(" ");
builder.Append(basedOn);
var cmd = new Command();
cmd.WorkingDirectory = repo;
cmd.Context = repo;
cmd.Args = $"branch {name} {basedOn}";
cmd.Args = builder.ToString();
cmd.Log = log;
return cmd.Exec();
}
@ -31,16 +41,6 @@
return cmd.Exec();
}
public static bool ResetWithoutCheckout(string repo, string name, string to, Models.ICommandLog log)
{
var cmd = new Command();
cmd.WorkingDirectory = repo;
cmd.Context = repo;
cmd.Args = $"branch -f {name} {to}";
cmd.Log = log;
return cmd.Exec();
}
public static bool SetUpstream(string repo, string name, string upstream, Models.ICommandLog log)
{
var cmd = new Command();

View file

@ -13,15 +13,28 @@ namespace SourceGit.Commands
public bool Branch(string branch, bool force)
{
var option = force ? "--force" : string.Empty;
Args = $"checkout {option} --progress {branch}";
var builder = new StringBuilder();
builder.Append("checkout --progress ");
if (force)
builder.Append("--force ");
builder.Append(branch);
Args = builder.ToString();
return Exec();
}
public bool Branch(string branch, string basedOn, bool force)
public bool Branch(string branch, string basedOn, bool force, bool allowOverwrite)
{
var option = force ? "--force" : string.Empty;
Args = $"checkout --progress -b {branch} {basedOn}";
var builder = new StringBuilder();
builder.Append("checkout --progress ");
builder.Append(allowOverwrite ? "-B " : "-b ");
if (force)
builder.Append("--force ");
builder.Append(branch);
builder.Append(" ");
builder.Append(basedOn);
Args = builder.ToString();
return Exec();
}