diff --git a/models/repo/pushmirror.go b/models/repo/pushmirror.go
index f34484f638..dad9a9d388 100644
--- a/models/repo/pushmirror.go
+++ b/models/repo/pushmirror.go
@@ -85,6 +85,12 @@ func UpdatePushMirror(ctx context.Context, m *PushMirror) error {
 	return err
 }
 
+// UpdatePushMirrorInterval updates the push-mirror
+func UpdatePushMirrorInterval(ctx context.Context, m *PushMirror) error {
+	_, err := db.GetEngine(ctx).ID(m.ID).Cols("interval").Update(m)
+	return err
+}
+
 func DeletePushMirrors(ctx context.Context, opts PushMirrorOptions) error {
 	if opts.RepoID > 0 {
 		_, err := db.GetEngine(ctx).Where(opts.toConds()).Delete(&PushMirror{})
diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index 3256d2ba91..6cb830b6d0 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -1966,6 +1966,8 @@ settings.mirror_settings.last_update = Last update
 settings.mirror_settings.push_mirror.none = No push mirrors configured
 settings.mirror_settings.push_mirror.remote_url = Git Remote Repository URL
 settings.mirror_settings.push_mirror.add = Add Push Mirror
+settings.mirror_settings.push_mirror.edit_sync_time = Edit mirror sync interval
+
 settings.sync_mirror = Synchronize Now
 settings.mirror_sync_in_progress = Mirror synchronization is in progress. Check back in a minute.
 settings.site = Website
diff --git a/routers/web/repo/setting/setting.go b/routers/web/repo/setting/setting.go
index b33660ffc9..71c1939f29 100644
--- a/routers/web/repo/setting/setting.go
+++ b/routers/web/repo/setting/setting.go
@@ -299,6 +299,43 @@ func SettingsPost(ctx *context.Context) {
 		ctx.Flash.Info(ctx.Tr("repo.settings.mirror_sync_in_progress"))
 		ctx.Redirect(repo.Link() + "/settings")
 
+	case "push-mirror-update":
+		if !setting.Mirror.Enabled {
+			ctx.NotFound("", nil)
+			return
+		}
+
+		// This section doesn't require repo_name/RepoName to be set in the form, don't show it
+		// as an error on the UI for this action
+		ctx.Data["Err_RepoName"] = nil
+
+		interval, err := time.ParseDuration(form.PushMirrorInterval)
+		if err != nil || (interval != 0 && interval < setting.Mirror.MinInterval) {
+			ctx.RenderWithErr(ctx.Tr("repo.mirror_interval_invalid"), tplSettingsOptions, &forms.RepoSettingForm{})
+			return
+		}
+
+		id, err := strconv.ParseInt(form.PushMirrorID, 10, 64)
+		if err != nil {
+			ctx.ServerError("UpdatePushMirrorIntervalPushMirrorID", err)
+			return
+		}
+		m := &repo_model.PushMirror{
+			ID:       id,
+			Interval: interval,
+		}
+		if err := repo_model.UpdatePushMirrorInterval(ctx, m); err != nil {
+			ctx.ServerError("UpdatePushMirrorInterval", err)
+			return
+		}
+		// Background why we are adding it to Queue
+		// If we observed its implementation in the context of `push-mirror-sync` where it
+		// is evident that pushing to the queue is necessary for updates.
+		// So, there are updates within the given interval, it is necessary to update the queue accordingly.
+		mirror_module.AddPushMirrorToQueue(m.ID)
+		ctx.Flash.Success(ctx.Tr("repo.settings.update_settings_success"))
+		ctx.Redirect(repo.Link() + "/settings")
+
 	case "push-mirror-remove":
 		if !setting.Mirror.Enabled {
 			ctx.NotFound("", nil)
diff --git a/templates/repo/settings/options.tmpl b/templates/repo/settings/options.tmpl
index f0b030dc54..569a576ce6 100644
--- a/templates/repo/settings/options.tmpl
+++ b/templates/repo/settings/options.tmpl
@@ -203,17 +203,27 @@
 							<td>{{$.locale.Tr "repo.settings.mirror_settings.direction.push"}}</td>
 							<td>{{if .LastUpdateUnix}}{{DateTime "full" .LastUpdateUnix}}{{else}}{{$.locale.Tr "never"}}{{end}} {{if .LastError}}<div class="ui red label" data-tooltip-content="{{.LastError}}">{{$.locale.Tr "error"}}</div>{{end}}</td>
 							<td class="right aligned">
-								<form method="post" class="gt-dib">
-									{{$.CsrfTokenHtml}}
-									<input type="hidden" name="action" value="push-mirror-remove">
-									<input type="hidden" name="push_mirror_id" value="{{.ID}}">
-									<button class="ui basic red tiny button inline text-thin">{{$.locale.Tr "remove"}}</button>
-								</form>
+								<button
+									class="ui tiny button show-modal"
+									data-modal="#push-mirror-edit-modal"
+									data-tooltip-content="{{$.locale.Tr "repo.settings.mirror_settings.push_mirror.edit_sync_time"}}"
+									data-modal-push-mirror-edit-id="{{.ID}}"
+									data-modal-push-mirror-edit-interval="{{.Interval}}"
+									data-modal-push-mirror-edit-address="{{$address.Address}}"
+								>
+									{{svg "octicon-pencil" 14}}
+								</button>
 								<form method="post" class="gt-dib">
 									{{$.CsrfTokenHtml}}
 									<input type="hidden" name="action" value="push-mirror-sync">
 									<input type="hidden" name="push_mirror_id" value="{{.ID}}">
-									<button class="ui primary tiny button inline text-thin">{{$.locale.Tr "repo.settings.sync_mirror"}}</button>
+									<button class="ui primary tiny button" data-tooltip-content="{{$.locale.Tr "repo.settings.sync_mirror"}}">{{svg "octicon-sync" 14}}</button>
+								</form>
+								<form method="post" class="gt-dib">
+									{{$.CsrfTokenHtml}}
+									<input type="hidden" name="action" value="push-mirror-remove">
+									<input type="hidden" name="push_mirror_id" value="{{.ID}}">
+									<button class="ui basic red tiny button" data-tooltip-content="{{$.locale.Tr "remove"}}">{{svg "octicon-trash" 14}}</button>
 								</form>
 							</td>
 						</tr>
@@ -980,3 +990,5 @@
 		</div>
 	{{end}}
 {{end}}
+
+{{template "repo/settings/push_mirror_sync_modal" .}}
diff --git a/templates/repo/settings/push_mirror_sync_modal.tmpl b/templates/repo/settings/push_mirror_sync_modal.tmpl
new file mode 100644
index 0000000000..a04574add5
--- /dev/null
+++ b/templates/repo/settings/push_mirror_sync_modal.tmpl
@@ -0,0 +1,32 @@
+<div class="ui small modal" id="push-mirror-edit-modal">
+	<div class="header">
+		{{$.locale.Tr "repo.settings.mirror_settings.push_mirror.edit_sync_time"}}
+	</div>
+	<div class="content">
+		<form class="ui form ignore-dirty" method="post">
+			{{.CsrfTokenHtml}}
+			<input type="hidden" name="action" value="push-mirror-update">
+			<input type="hidden" name="push_mirror_id" id="push-mirror-edit-id">
+			<div class="field">
+				<label for="name">{{$.locale.Tr "repo.settings.mirror_settings.mirrored_repository"}}</label>
+				<div class="ui small input">
+					<input id="push-mirror-edit-address" readonly>
+				</div>
+			</div>
+			<div class="inline field">
+				<label for="push-mirror-edit-interval">{{.locale.Tr "repo.mirror_interval" .MinimumMirrorInterval}}</label>
+				<input id="push-mirror-edit-interval" name="push_mirror_interval" autofocus>
+			</div>
+			<div class="actions">
+				<button class="ui small basic cancel button">
+					{{svg "octicon-x"}}
+					{{.locale.Tr "cancel"}}
+				</button>
+				<button class="ui primary small approve button">
+					{{svg "fontawesome-save"}}
+					{{.locale.Tr "save"}}
+				</button>
+			</div>
+		</form>
+	</div>
+</div>