Previously, --cached and --3way were not allowed to be used together, since --3way wrote conflict markers into the working tree. These changes change semantics so that if these flags are given together and there is a conflict, the conflicting objects are left at a higher order in the cache, and the command will return non-zero. If there is no conflict, the patch is applied directly to cache as expected and the command will return 0. The user can use `git diff` to view the contents of the conflict, or `git checkout -m -- .` to regenerate the conflict markers in the working directory. With the combined --3way and --cached flags, The conflict markers won't be written to the working directory, so there is no point in attempting rerere. Signed-off-by: Jerry Zhang <jerry@xxxxxxxxxx> Signed-off-by: Jerry Zhang <jerryxzha@xxxxxxxxxxxxxx> --- Documentation/git-apply.txt | 3 ++- apply.c | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Documentation/git-apply.txt b/Documentation/git-apply.txt index 91d9a8601c..392882d9a5 100644 --- a/Documentation/git-apply.txt +++ b/Documentation/git-apply.txt @@ -89,7 +89,8 @@ OPTIONS and we have those blobs available locally, possibly leaving the conflict markers in the files in the working tree for the user to resolve. This option implies the `--index` option, and is incompatible - with the `--reject` and the `--cached` options. + with the `--reject` option. When used with the --cached option, any conflicts + are left at higher stages in the cache. --build-fake-ancestor=<file>:: Newer 'git diff' output has embedded 'index information' diff --git a/apply.c b/apply.c index 6695a931e9..e59c77a1b7 100644 --- a/apply.c +++ b/apply.c @@ -133,8 +133,6 @@ int check_apply_state(struct apply_state *state, int force_apply) if (state->apply_with_reject && state->threeway) return error(_("--reject and --3way cannot be used together.")); - if (state->cached && state->threeway) - return error(_("--cached and --3way cannot be used together.")); if (state->threeway) { if (is_not_gitdir) return error(_("--3way outside a repository")); @@ -4646,7 +4644,8 @@ static int write_out_results(struct apply_state *state, struct patch *list) } string_list_clear(&cpath, 0); - repo_rerere(state->repo, 0); + if (!state->cached) + repo_rerere(state->repo, 0); } return errs; -- 2.29.0