@@ -193,6 +193,11 @@ func ApplyPlan(
193193 originalRefs [newName ] = sha
194194 delete (originalRefs , oldName )
195195 }
196+ // Update originalParentTips key
197+ if sha , ok := originalParentTips [oldName ]; ok {
198+ originalParentTips [newName ] = sha
199+ delete (originalParentTips , oldName )
200+ }
196201 s .Branches [idx ].Branch = newName
197202 }
198203 // Update the node's ref for later steps
@@ -360,25 +365,29 @@ func ApplyPlan(
360365 needsReorder = true
361366 }
362367
363- // Rebuild s.Branches in the desired order
364- if needsReorder || len (s .Branches ) != len (desiredOrder ) {
365- newBranches := make ([]stack.BranchRef , 0 , len (desiredOrder ))
366-
367- // Add merged branches first (they stay in place)
368- for _ , b := range s .Branches {
369- if b .IsMerged () {
370- newBranches = append (newBranches , b )
371- }
372- }
373-
374- // Add active branches in desired order
368+ // Rebuild s.Branches in the desired order, preserving merged branches
369+ // at their original positions.
370+ if needsReorder {
371+ // Build a queue of active branches in the desired order
372+ desiredIdx := 0
375373 branchMap := make (map [string ]stack.BranchRef )
376374 for _ , b := range s .Branches {
377375 branchMap [b .Branch ] = b
378376 }
379- for _ , name := range desiredOrder {
380- if b , ok := branchMap [name ]; ok {
377+
378+ newBranches := make ([]stack.BranchRef , 0 , len (s .Branches ))
379+ for _ , b := range s .Branches {
380+ if b .IsMerged () {
381+ // Merged branches stay at their original position
381382 newBranches = append (newBranches , b )
383+ } else {
384+ // Substitute the next active branch from the desired order
385+ if desiredIdx < len (desiredOrder ) {
386+ if sub , ok := branchMap [desiredOrder [desiredIdx ]]; ok {
387+ newBranches = append (newBranches , sub )
388+ }
389+ desiredIdx ++
390+ }
382391 }
383392 }
384393
0 commit comments