mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
![]() When a series of patches for a topic-B depends on having topic-A, the workflow to prepare the topic-B branch would look like this: $ git checkout -b topic-B main $ git merge --no-ff --no-edit topic-A $ git am <mbox-for-topic-B When topic-A gets updated, recreating the first merge and rebasing the rest of the topic-B, all on detached HEAD, is a useful technique. After updating topic-A with its new round of patches: $ git checkout topic-B $ prev=$(git rev-parse 'HEAD^{/^Merge branch .topic-A. into}') $ git checkout --detach $prev^1 $ git merge --no-ff --no-edit topic-A $ git rebase --onto HEAD $prev @{-1}^0 $ git checkout -B @{-1} This will (0) check out the current topic-B. (1) find the previous merge of topic-A into topic-B. (2) detach the HEAD to the parent of the previous merge. (3) merge the updated topic-A to it. (4) reapply the patches to rebuild the rest of topic-B. (5) update topic-B with the result. without contaminating the reflog of topic-B too much. topic-B@{1} is the "logically previous" state before topic-A got updated, for example. At (4), comparison (e.g. range-diff) between HEAD and @{-1} is a meaningful way to sanity check the result, and the same can be done at (5) by comparing topic-B and topic-B@{1}. But there is one glitch. The merge into the detached HEAD done in the step (3) above gives us "Merge branch 'topic-A' into HEAD", and does not say "into topic-B". Teach the "--into-name=<branch>" option to "git merge" and its underlying "git fmt-merge-message", to pretend as if we were merging into <branch>, no matter what branch we are actually merging into, when they prepare the merge message. The pretend name honors the usual "into <target>" suppression mechanism, which can be seen in the tests added here. Signed-off-by: Junio C Hamano <gitster@pobox.com> |
||
---|---|---|
.. | ||
config | ||
howto | ||
RelNotes | ||
technical | ||
.gitattributes | ||
.gitignore | ||
asciidoc.conf | ||
asciidoctor-extensions.rb | ||
blame-options.txt | ||
build-docdep.perl | ||
cat-texi.perl | ||
cmd-list.perl | ||
CodingGuidelines | ||
config.txt | ||
date-formats.txt | ||
diff-format.txt | ||
diff-generate-patch.txt | ||
diff-options.txt | ||
doc-diff | ||
docbook-xsl.css | ||
docbook.xsl | ||
everyday.txto | ||
fetch-options.txt | ||
fix-texi.perl | ||
git-add.txt | ||
git-am.txt | ||
git-annotate.txt | ||
git-apply.txt | ||
git-archimport.txt | ||
git-archive.txt | ||
git-bisect-lk2009.txt | ||
git-bisect.txt | ||
git-blame.txt | ||
git-branch.txt | ||
git-bugreport.txt | ||
git-bundle.txt | ||
git-cat-file.txt | ||
git-check-attr.txt | ||
git-check-ignore.txt | ||
git-check-mailmap.txt | ||
git-check-ref-format.txt | ||
git-checkout-index.txt | ||
git-checkout.txt | ||
git-cherry-pick.txt | ||
git-cherry.txt | ||
git-citool.txt | ||
git-clean.txt | ||
git-clone.txt | ||
git-column.txt | ||
git-commit-graph.txt | ||
git-commit-tree.txt | ||
git-commit.txt | ||
git-config.txt | ||
git-count-objects.txt | ||
git-credential-cache--daemon.txt | ||
git-credential-cache.txt | ||
git-credential-store.txt | ||
git-credential.txt | ||
git-cvsexportcommit.txt | ||
git-cvsimport.txt | ||
git-cvsserver.txt | ||
git-daemon.txt | ||
git-describe.txt | ||
git-diff-files.txt | ||
git-diff-index.txt | ||
git-diff-tree.txt | ||
git-diff.txt | ||
git-difftool.txt | ||
git-fast-export.txt | ||
git-fast-import.txt | ||
git-fetch-pack.txt | ||
git-fetch.txt | ||
git-filter-branch.txt | ||
git-fmt-merge-msg.txt | ||
git-for-each-ref.txt | ||
git-for-each-repo.txt | ||
git-format-patch.txt | ||
git-fsck-objects.txt | ||
git-fsck.txt | ||
git-gc.txt | ||
git-get-tar-commit-id.txt | ||
git-grep.txt | ||
git-gui.txt | ||
git-hash-object.txt | ||
git-help.txt | ||
git-http-backend.txt | ||
git-http-fetch.txt | ||
git-http-push.txt | ||
git-imap-send.txt | ||
git-index-pack.txt | ||
git-init-db.txt | ||
git-init.txt | ||
git-instaweb.txt | ||
git-interpret-trailers.txt | ||
git-log.txt | ||
git-ls-files.txt | ||
git-ls-remote.txt | ||
git-ls-tree.txt | ||
git-mailinfo.txt | ||
git-mailsplit.txt | ||
git-maintenance.txt | ||
git-merge-base.txt | ||
git-merge-file.txt | ||
git-merge-index.txt | ||
git-merge-one-file.txt | ||
git-merge-tree.txt | ||
git-merge.txt | ||
git-mergetool--lib.txt | ||
git-mergetool.txt | ||
git-mktag.txt | ||
git-mktree.txt | ||
git-multi-pack-index.txt | ||
git-mv.txt | ||
git-name-rev.txt | ||
git-notes.txt | ||
git-p4.txt | ||
git-pack-objects.txt | ||
git-pack-redundant.txt | ||
git-pack-refs.txt | ||
git-patch-id.txt | ||
git-prune-packed.txt | ||
git-prune.txt | ||
git-pull.txt | ||
git-push.txt | ||
git-quiltimport.txt | ||
git-range-diff.txt | ||
git-read-tree.txt | ||
git-rebase.txt | ||
git-receive-pack.txt | ||
git-reflog.txt | ||
git-remote-ext.txt | ||
git-remote-fd.txt | ||
git-remote-helpers.txto | ||
git-remote.txt | ||
git-repack.txt | ||
git-replace.txt | ||
git-request-pull.txt | ||
git-rerere.txt | ||
git-reset.txt | ||
git-restore.txt | ||
git-rev-list.txt | ||
git-rev-parse.txt | ||
git-revert.txt | ||
git-rm.txt | ||
git-send-email.txt | ||
git-send-pack.txt | ||
git-sh-i18n--envsubst.txt | ||
git-sh-i18n.txt | ||
git-sh-setup.txt | ||
git-shell.txt | ||
git-shortlog.txt | ||
git-show-branch.txt | ||
git-show-index.txt | ||
git-show-ref.txt | ||
git-show.txt | ||
git-sparse-checkout.txt | ||
git-stage.txt | ||
git-stash.txt | ||
git-status.txt | ||
git-stripspace.txt | ||
git-submodule.txt | ||
git-svn.txt | ||
git-switch.txt | ||
git-symbolic-ref.txt | ||
git-tag.txt | ||
git-tools.txt | ||
git-unpack-file.txt | ||
git-unpack-objects.txt | ||
git-update-index.txt | ||
git-update-ref.txt | ||
git-update-server-info.txt | ||
git-upload-archive.txt | ||
git-upload-pack.txt | ||
git-var.txt | ||
git-verify-commit.txt | ||
git-verify-pack.txt | ||
git-verify-tag.txt | ||
git-version.txt | ||
git-web--browse.txt | ||
git-whatchanged.txt | ||
git-worktree.txt | ||
git-write-tree.txt | ||
git.txt | ||
gitattributes.txt | ||
gitcli.txt | ||
gitcore-tutorial.txt | ||
gitcredentials.txt | ||
gitcvs-migration.txt | ||
gitdiffcore.txt | ||
giteveryday.txt | ||
gitfaq.txt | ||
gitglossary.txt | ||
githooks.txt | ||
gitignore.txt | ||
gitk.txt | ||
gitmailmap.txt | ||
gitmodules.txt | ||
gitnamespaces.txt | ||
gitremote-helpers.txt | ||
gitrepository-layout.txt | ||
gitrevisions.txt | ||
gitsubmodules.txt | ||
gittutorial-2.txt | ||
gittutorial.txt | ||
gitweb.conf.txt | ||
gitweb.txt | ||
gitworkflows.txt | ||
glossary-content.txt | ||
howto-index.sh | ||
i18n.txt | ||
install-doc-quick.sh | ||
install-webdoc.sh | ||
line-range-format.txt | ||
line-range-options.txt | ||
lint-gitlink.perl | ||
lint-man-end-blurb.perl | ||
lint-man-section-order.perl | ||
Makefile | ||
manpage-base-url.xsl.in | ||
manpage-bold-literal.xsl | ||
manpage-normal.xsl | ||
manpage-quote-apos.xsl | ||
manpage.xsl | ||
merge-options.txt | ||
merge-strategies.txt | ||
MyFirstContribution.txt | ||
MyFirstObjectWalk.txt | ||
object-format-disclaimer.txt | ||
pretty-formats.txt | ||
pretty-options.txt | ||
pull-fetch-param.txt | ||
ref-reachability-filters.txt | ||
rev-list-description.txt | ||
rev-list-options.txt | ||
revisions.txt | ||
sequencer.txt | ||
signoff-option.txt | ||
SubmittingPatches | ||
texi.xsl | ||
trace2-target-values.txt | ||
transfer-data-leaks.txt | ||
urls-remotes.txt | ||
urls.txt | ||
user-manual.conf | ||
user-manual.txt |