Don't clobber the user's upstream settings (#26486)

Mikayla Maki created

It's not clobbering time :(

Release Notes:

- Git Beta: Fixed a bug where our push button would always overwrite the
current branch's upstream

Change summary

crates/git_ui/src/git_panel.rs | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)

Detailed changes

crates/git_ui/src/git_panel.rs 🔗

@@ -1706,10 +1706,18 @@ impl GitPanel {
         };
         telemetry::event!("Git Pushed");
         let branch = branch.clone();
+
         let options = if force_push {
-            PushOptions::Force
+            Some(PushOptions::Force)
         } else {
-            PushOptions::SetUpstream
+            match branch.upstream {
+                Some(Upstream {
+                    tracking: UpstreamTracking::Gone,
+                    ..
+                })
+                | None => Some(PushOptions::SetUpstream),
+                _ => None,
+            }
         };
         let remote = self.get_current_remote(window, cx);
 
@@ -1739,7 +1747,7 @@ impl GitPanel {
                 repo.push(
                     branch.name.clone(),
                     remote.name.clone(),
-                    Some(options),
+                    options,
                     askpass_delegate,
                     cx,
                 )