diff --git a/pkg/commands/git_commands/branch.go b/pkg/commands/git_commands/branch.go index e634b27ec..c5c81e223 100644 --- a/pkg/commands/git_commands/branch.go +++ b/pkg/commands/git_commands/branch.go @@ -102,19 +102,18 @@ func (self *BranchCommands) CurrentBranchInfo() (BranchInfo, error) { }, nil } -// CurrentBranchName get name of current branch +// CurrentBranchName get name of current branch. Returns empty string if HEAD is detached. func (self *BranchCommands) CurrentBranchName() (string, error) { - cmdArgs := NewGitCmd("rev-parse"). - Arg("--abbrev-ref"). - Arg("--verify"). - Arg("HEAD"). + cmdArgs := NewGitCmd("branch"). + Arg("--show-current"). ToArgv() output, err := self.cmd.New(cmdArgs).DontLog().RunWithOutput() - if err == nil { - return strings.TrimSpace(output), nil + if err != nil { + return "", err } - return "", err + + return strings.TrimSpace(output), nil } // LocalDelete delete branch locally diff --git a/pkg/gui/controllers/helpers/refresh_helper.go b/pkg/gui/controllers/helpers/refresh_helper.go index 0e19149c1..2e0e157e3 100644 --- a/pkg/gui/controllers/helpers/refresh_helper.go +++ b/pkg/gui/controllers/helpers/refresh_helper.go @@ -308,7 +308,7 @@ func (self *RefreshHelper) determineCheckedOutBranchName() string { // In all other cases, get the branch name by asking git what branch is // checked out. Note that if we're on a detached head (for reasons other // than rebasing or bisecting, i.e. it was explicitly checked out), then - // this will return its hash. + // this will return an empty string. if branchName, err := self.c.Git().Branch.CurrentBranchName(); err == nil { return branchName } diff --git a/pkg/integration/tests/commit/do_not_show_branch_marker_for_head_commit.go b/pkg/integration/tests/commit/do_not_show_branch_marker_for_head_commit.go new file mode 100644 index 000000000..54b988ef4 --- /dev/null +++ b/pkg/integration/tests/commit/do_not_show_branch_marker_for_head_commit.go @@ -0,0 +1,34 @@ +package commit + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var DoNotShowBranchMarkerForHeadCommit = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Verify that no branch heads are shown for the branch head if there is a tag with the same name as the branch", + ExtraCmdArgs: []string{}, + Skip: false, + GitVersion: AtLeast("2.38.0"), + SetupConfig: func(config *config.AppConfig) { + config.GetAppState().GitLogShowGraph = "never" + }, + SetupRepo: func(shell *Shell) { + shell.EmptyCommit("one") + shell.NewBranch("branch1") + shell.EmptyCommit("two") + shell.EmptyCommit("three") + shell.CreateLightweightTag("branch1", "master") + + shell.SetConfig("rebase.updateRefs", "true") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + // Check that the local commits view does show a branch marker for the head commit + t.Views().Commits(). + Lines( + Contains("CI three"), + Contains("CI two"), + Contains("CI branch1 one"), + ) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index ef26f0223..e1dd36dbf 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -118,6 +118,7 @@ var tests = []*components.IntegrationTest{ commit.CreateTag, commit.DisableCopyCommitMessageBody, commit.DiscardOldFileChanges, + commit.DoNotShowBranchMarkerForHeadCommit, commit.FailHooksThenCommitNoHooks, commit.FindBaseCommitForFixup, commit.FindBaseCommitForFixupDisregardMainBranch,