git: Add base branch support to create_branch (#42151)

Closes [#41674](https://github.com/zed-industries/zed/issues/41674)

Description:
Creating a branch from a base requires switching to the base branch
first, then creating the new branch and checking out to it, which
requires multiple operations.

Add base_branch parameter to create_branch to allow a new branch from a
base branch in one operation which is synonymous to the command `git
switch -c <new-branch> <base-branch>`.

Below is the video after solving the issue: 

(`master` branch is the default branch here, and I create a branch
`new-branch-2` based off the `master` branch. I also show the error
which used to appear before the fix.)

[Screencast from 2025-11-07
05-14-32.webm](https://github.com/user-attachments/assets/d37d1b58-af5f-44e8-b867-2aa5d4ef3d90)

Release Notes:

- Fixed the branch-picking error by replacing multiple sequential switch
operations with just one switch operation.

Signed-off-by: ayu-ch <ayu.chandekar@gmail.com>
This commit is contained in:
Ayush Chandekar
2025-11-09 21:35:29 -05:00
committed by GitHub
parent c60d31a726
commit e025ee6a11
7 changed files with 60 additions and 43 deletions
+2 -10
View File
@@ -241,18 +241,10 @@ impl BranchListDelegate {
return;
};
let new_branch_name = new_branch_name.to_string().replace(' ', "-");
let base_branch = from_branch.map(|b| b.to_string());
cx.spawn(async move |_, cx| {
if let Some(based_branch) = from_branch {
repo.update(cx, |repo, _| repo.change_branch(based_branch.to_string()))?
.await??;
}
repo.update(cx, |repo, _| {
repo.create_branch(new_branch_name.to_string())
})?
.await??;
repo.update(cx, |repo, _| {
repo.change_branch(new_branch_name.to_string())
repo.create_branch(new_branch_name, base_branch)
})?
.await??;