Add a new option: "--force-if-includes" to "git-push" where forced updates are allowed only if the tip of the remote-tracking ref has been integrated locally, by verifying if the tip of the remote-tracking ref -- on which a local branch has based on -- is reachable from at least one of the "reflog" entries of the branch about to be updated by force on the remote. This option can be used with "--force-with-lease" with setups where the remote-tracking refs of the repository are implicitly updated in the background to help prevent unintended remote overwrites. If a local branch is based on a remote ref for a rewrite, and if that remote-tracking ref is updated by a push from another repository after it has been checked out locally, force updating that branch to remote with "--force-with-lease[=<refname>[:<expect>]]" without specifying the "<expect>" value, can cause the update that happened in-between the checkout and forced push to be lost. Changes since v7: - Clean up the way batching is done for "in_merge_bases_many()". - The timestamp check during "reflog" iteration has been moved to the end of the function because we should stop collecting entries older than the current one (i.e., in the next round). - Add a test case to show deletes should be allowed with the new option. - Minor changes to comments and function names. Srinidhi Kaushik (3): push: add reflog check for "--force-if-includes" push: parse and set flag for "--force-if-includes" t, doc: update tests, reference for "--force-if-includes" Documentation/config/advice.txt | 9 +- Documentation/config/push.txt | 6 + Documentation/git-push.txt | 26 ++++- advice.c | 3 + advice.h | 2 + builtin/push.c | 27 +++++ builtin/send-pack.c | 12 ++ remote-curl.c | 14 ++- remote.c | 188 ++++++++++++++++++++++++++++++-- remote.h | 12 +- send-pack.c | 1 + t/t5533-push-cas.sh | 140 ++++++++++++++++++++++++ transport-helper.c | 10 ++ transport.c | 8 ++ transport.h | 15 ++- 15 files changed, 455 insertions(+), 18 deletions(-) base-commit: 9bc233ae1cf19a49e51842c7959d80a675dbd1c0 -- 2.28.0