Skip to content

merge-tree: allow specifying a base commit when --write-tree is passed

Kyle Zhao via GitGitGadget git 8 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v8 Latest3 patches 1 replyIn review
  2. v72 patches 8 repliesSuperseded
  3. v62 patches 1 replySuperseded
Earlier versions · 5
VersionPostedPatchesRepliesStatus
v52 patches2 repliesSuperseded
v42 patches3 repliesSuperseded
v31 patch1 replySuperseded
v21 patch1 replySuperseded
v11 patch7 repliesSuperseded

Changes in v8 from the cover letter

* docs: fix description of the --merge-base option

Patches in v8 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/3merge-tree.c: add --merge-base=<commit> optionDocumentation/git-merge-tree.txt builtin/merge-tree.c t/t4301-merge-tree-write-tree.sh+66 -110 replies
2/3merge-tree.c: allow specifying the merge-base when --stdin is passedDocumentation/git-merge-tree.txt builtin/merge-tree.c t/t4301-merge-tree-write-tree.sh+67 -30 replies
3/3docs: fix description of the `--merge-base` optionDocumentation/git-merge-tree.txt+2 -21 reply

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v8 yet.

Read the v8 thread

Cover letter [PATCH v8 0/3] merge-tree: allow specifying a base commit when --write-tree is passed

Users may specify the merge-base multiple times, such as "git merge-tree --merge-base=X --merge-base=Y A B", but found it doesn't work.

This patch I fix the description of option "--merge-base".

By the way, the amount of the effort support specifying multiple bases from the codebase without these patches feels more or less the same ballpark as these patches.

One point worth discussing is whether manually specifying multiple bases is a rarely used feature and do we need to support it in the first version.

If needed, It might take a while for me to implement it, and the feature might be delayed to the version after 2.39.

Thanks, Kyle

Changes since v1:

* Changed merge_incore_recursive() to merge_incore_nonrecursive() when merge-base is specified.
* Fixed c style problem.
* Moved commit lookup/die logic out to the parsing logic in cmd_merge_tree().
* use test_commit for test

Changes since v2:

* commit message
* Rebased on top of en/merge-tree-sequence.
* Set opt.ancestor to o->merge_base. Because opt.ancestor is a *char. To make it easier to pass parameters, I moved lookup_commit_reference_by_name() to real_ merge() again.
* Added test comment.

Changes since v3:

* support --merge-base in conjunction with --stdin

Changes since v4:

* commit message
* added input format document
* changed the input format for specifying the merge-base when --stdin is passed
* changed the output when --stdin and --merge-base are used at the same time
* add comment for test

Changes since v5:

* improved test: remove the test repo after the test; avoid sub-shell.

Changes since v6:

* fixed comment of test

Changes since v7:

* docs: fix description of the --merge-base option

Kyle Zhao (3):
merge-tree.c: add --merge-base=<commit> option merge-tree.c: allow specifying the merge-base when --stdin is passed
docs: fix description of the --merge-base option

 Documentation/git-merge-tree.txt | 16 ++++++++
 builtin/merge-tree.c             | 65 ++++++++++++++++++++++++++------
 t/t4301-merge-tree-write-tree.sh | 62 ++++++++++++++++++++++++++++++
 3 files changed, 131 insertions(+), 12 deletions(-)

base-commit: ec1edbcb56ac05e9980299b05924c5c1b51d68b4
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1397%2Fkeyu98%2Fkz%2Fmerge-tree-option-merge-base-v8
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1397/keyu98/kz/merge-tree-option-merge-base-v8
Pull-Request: https://github.com/gitgitgadget/git/pull/1397

Range-diff vs v7:

 1:  1cf1c69b8e8 = 1:  1cf1c69b8e8 merge-tree.c: add --merge-base=<commit> option
 2:  48e55d4e97c = 2:  48e55d4e97c merge-tree.c: allow specifying the merge-base when --stdin is passed
 -:  ----------- > 3:  c21466d1db0 docs: fix description of the `--merge-base` option
Signature · 1 line
gitgitgadget