diff --git a/git-gui.sh b/git-gui.sh
index 7c25bb98089..9df49710e1b 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -601,6 +601,7 @@ proc apply_config {} {
 	}
 }
 
+set default_config(branch.autosetupmerge) true
 set default_config(merge.diffstat) true
 set default_config(merge.summary) false
 set default_config(merge.verbosity) 2
diff --git a/lib/branch_create.tcl b/lib/branch_create.tcl
index 53dfb4ce6bb..3817771b944 100644
--- a/lib/branch_create.tcl
+++ b/lib/branch_create.tcl
@@ -183,6 +183,9 @@ method _create {} {
 	if {$spec ne {} && $opt_fetch} {
 		$co enable_fetch $spec
 	}
+	if {$spec ne {}} {
+		$co remote_source $spec
+	}
 
 	if {[$co run]} {
 		destroy $w
diff --git a/lib/checkout_op.tcl b/lib/checkout_op.tcl
index 6e1411711bd..caca88831b7 100644
--- a/lib/checkout_op.tcl
+++ b/lib/checkout_op.tcl
@@ -16,6 +16,7 @@ field merge_base   {}; # merge base if we have another ref involved
 field fetch_spec   {}; # refetch tracking branch if used?
 field checkout      1; # actually checkout the branch?
 field create        0; # create the branch if it doesn't exist?
+field remote_source {}; # same as fetch_spec, to setup tracking
 
 field reset_ok      0; # did the user agree to reset?
 field fetch_ok      0; # did the fetch succeed?
@@ -44,6 +45,10 @@ method enable_fetch {spec} {
 	set fetch_spec $spec
 }
 
+method remote_source {spec} {
+	set remote_source $spec
+}
+
 method enable_checkout {co} {
 	set checkout $co
 }
@@ -145,7 +150,7 @@ method _finish_fetch {ok} {
 }
 
 method _update_ref {} {
-	global null_sha1 current_branch
+	global null_sha1 current_branch repo_config
 
 	set ref $new_ref
 	set new $new_hash
@@ -172,6 +177,23 @@ method _update_ref {} {
 
 		set reflog_msg "branch: Created from $new_expr"
 		set cur $null_sha1
+
+		if {($repo_config(branch.autosetupmerge) eq {true}
+			|| $repo_config(branch.autosetupmerge) eq {always})
+			&& $remote_source ne {}
+			&& "refs/heads/$newbranch" eq $ref} {
+
+			set c_remote [lindex $remote_source 1]
+			set c_merge [lindex $remote_source 2]
+			if {[catch {
+					git config branch.$newbranch.remote $c_remote
+					git config branch.$newbranch.merge  $c_merge
+				} err]} {
+				_error $this [strcat \
+				[mc "Failed to configure simplified git-pull for '%s'." $newbranch] \
+				"\n\n$err"]
+			}
+		}
 	} elseif {$create && $merge_type eq {none}} {
 		# We were told to create it, but not do a merge.
 		# Bad.  Name shouldn't have existed.