t, doc: update tests, reference for "--force-if-includes"
Update test cases for the new option, and document its usage
and update related references.
Update test cases for the new option, and document its usage
and update related references.
- t/t5533-push-cas.sh:
Update test cases for "compare-and-swap" when used along with
"--force-if-includes" helps mitigate overwrites when remote
refs are updated in the background; allows forced updates when
changes from remote are integrated locally.
- Documentation:
Add reference for the new option, configuration setting
("push.useForceIfIncludes") and advise messages.
Signed-off-by: Srinidhi Kaushik <shrinidhi.kaushik@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Srinidhi Kaushik4 years agocommitted byJunio C Hamano
@ -320,6 +320,14 @@ seen and are willing to overwrite, then rewrite history, and finally
@@ -320,6 +320,14 @@ seen and are willing to overwrite, then rewrite history, and finally
force push changes to `master` if the remote version is still at
`base`, regardless of what your local `remotes/origin/master` has been
updated to in the background.
+
Alternatively, specifying `--force-if-includes` as an ancillary option
along with `--force-with-lease[=<refname>]` (i.e., without saying what
exact commit the ref on the remote side must be pointing at, or which
refs on the remote side are being protected) at the time of "push" will
verify if updates from the remote-tracking refs that may have been
implicitly updated in the background are integrated locally before
allowing a forced update.
-f::
--force::
@ -341,6 +349,22 @@ one branch, use a `+` in front of the refspec to push (e.g `git push
@@ -341,6 +349,22 @@ one branch, use a `+` in front of the refspec to push (e.g `git push
origin +master` to force a push to the `master` branch). See the
`<refspec>...` section above for details.
--[no-]force-if-includes::
Force an update only if the tip of the remote-tracking ref
has been integrated locally.
+
This option enables a check that verifies if the tip of the
remote-tracking ref is reachable from one of the "reflog" entries of
the local branch based in it for a rewrite. The check ensures that any
updates from the remote have been incorporated locally by rejecting the
forced update if that is not the case.
+
If the option is passed without specifying `--force-with-lease`, or
specified along with `--force-with-lease=<refname>:<expect>`, it is
a "no-op".
+
Specifying `--no-force-if-includes` disables this behavior.
--repo=<repository>::
This option is equivalent to the <repository> argument. If both
are specified, the command-line argument takes precedence.
@ -256,4 +296,101 @@ test_expect_success 'background updates of REMOTE can be mitigated with a non-up
@@ -256,4 +296,101 @@ test_expect_success 'background updates of REMOTE can be mitigated with a non-up
)
'
test_expect_success 'background updates to remote can be mitigated with "--force-if-includes"' '