From patchwork Wed Apr 17 18:01:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Denton Liu X-Patchwork-Id: 10905755 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B98F0922 for ; Wed, 17 Apr 2019 18:01:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A06D328706 for ; Wed, 17 Apr 2019 18:01:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9479528B26; Wed, 17 Apr 2019 18:01:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7F1EF28706 for ; Wed, 17 Apr 2019 18:01:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732507AbfDQSBh (ORCPT ); Wed, 17 Apr 2019 14:01:37 -0400 Received: from mail-pg1-f193.google.com ([209.85.215.193]:34544 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731116AbfDQSBf (ORCPT ); Wed, 17 Apr 2019 14:01:35 -0400 Received: by mail-pg1-f193.google.com with SMTP id v12so12372618pgq.1 for ; Wed, 17 Apr 2019 11:01:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=VgHeVfZ4JXet4urFM85LcKHE9ODyyaHX+LEXJBAiSGo=; b=MSgAn89UPNjcxpGsy/Jyq+Uwl+av1TYjljQ5jQx0ATK065Rj1S4+q77KlqY/WBSAXm 7tDxRtEFHL65DPFRIdMdBXTEWDHb9FCE1T2GNXpz9liImlu8qItxAxa6I6/3b7iZRl94 VL+du5YPMcslpRPlQNTHQqGB4o7GjZqqehP/GrYdvA3A8VONEWJlZ7wQ8hVND3f+TKNo COouM7P/KSyXGN/JYogv10dFL4DAiCgSgUmySaokq2zxzuJ3HUgBv1H6VirYtFl5I9R9 Yd9OEvrjdqcbJzF/RhWbwz/mvmMQTd9Vy7pmWX9j8nzH6qg7RQsEX3QUhNc7INh+wTa6 33PA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=VgHeVfZ4JXet4urFM85LcKHE9ODyyaHX+LEXJBAiSGo=; b=R1QtYOr0Ik1Bj5YQ+Z+wPl1VhxbcGnx2Ti49O+VF1MYGZi9eBzL2ae5PAxlblWb09W f20zl0v8Pz6p69cZ77qldsCu4YqUQq3pujWx94csEUdVoSvX+rFq+lLBITZ9GnStJyRD AUH8HPRh1VNn39UU3ttIWer6Sbsg13TFDp3dEpwNSrBx+DMLe5uFPwXz87/vTHYUlr5n K6Ugyxg6XD8r7Kz+ni7by+esvnPNb1ZKubXVfpnMZSW7G3H9pmNaXmmCyIF5nFOsKI0B tiTQVmypZc8UZcTpKDB6FY3H6gDTIDlE6WWgfZIL2VgHic6ZPxFy0woCGF2mZLgfUMM0 RO7Q== X-Gm-Message-State: APjAAAVWnHhW7knxYGNWq56B5UtN0p78ieLO9XpSrtHZJ0gKmBrL7oqd wn0dBFFtY46mLeKeyAWfwdtu6mtnDBQ= X-Google-Smtp-Source: APXvYqynnP5YfU2HP/+I9TXR6h6i2o7agkjJCOEpZev9ljlRe7+R6nEZXKPwA9/sDUOeEcnhunlIFw== X-Received: by 2002:a63:5d44:: with SMTP id o4mr3504029pgm.15.1555524093856; Wed, 17 Apr 2019 11:01:33 -0700 (PDT) Received: from dev-l ([149.28.200.39]) by smtp.gmail.com with ESMTPSA id y1sm105045392pgc.29.2019.04.17.11.01.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 11:01:33 -0700 (PDT) Date: Wed, 17 Apr 2019 11:01:32 -0700 From: Denton Liu To: Git Mailing List Cc: Eric Sunshine , Junio C Hamano , =?iso-8859-1?q?=C6var_Arnfj=F6r=F0?= Bjarmason , Johannes Schindelin , Johannes Sixt , SZEDER =?iso-8859-1?q?G=E1bor?= Subject: [PATCH v6 6/6] rebase: teach rebase --keep-base Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.24 (2015-08-30) Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP A common scenario is if a user is working on a topic branch and they wish to make some changes to intermediate commits or autosquash, they would run something such as git rebase -i --onto master... master in order to preserve the merge base. This is useful when contributing a patch series to the Git mailing list, one often starts on top of the current 'master'. However, while developing the patches, 'master' is also developed further and it is sometimes not the bst idea to keep rebasing on top of 'master', but to keep the base commit as-is. Alternatively, a user wishing to test individual commits in a topic branch without changing anything may run git rebase -x ./test.sh master... master Since rebasing onto the merge base of the branch and the upstream is such a common case, introduce the --keep-base option as a shortcut. This allows us to rewrite the above as git rebase -i --keep-base master and git rebase -x ./test.sh --keep-base master respectively. Add tests to ensure --keep-base works correctly in the normal case and fails when there are multiple merge bases, both in regular and interactive mode. Also, test to make sure conflicting options cause rebase to fail. While we're adding test cases, add a missing set_fake_editor call to 'rebase -i --onto master...side'. While we're documenting the --keep-base option, change an instance of "merge-base" to "merge base", which is the consistent spelling. Helped-by: Eric Sunshine Helped-by: Junio C Hamano Helped-by: Ævar Arnfjörð Bjarmason Helped-by: Johannes Schindelin Signed-off-by: Denton Liu --- Documentation/git-rebase.txt | 30 +++++++++++++++-- builtin/rebase.c | 32 ++++++++++++++---- t/t3416-rebase-onto-threedots.sh | 57 ++++++++++++++++++++++++++++++++ t/t3431-rebase-fork-point.sh | 4 +++ t/t3432-rebase-fast-forward.sh | 11 ++++++ 5 files changed, 125 insertions(+), 9 deletions(-) diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt index 6363d674b7..569ab708d4 100644 --- a/Documentation/git-rebase.txt +++ b/Documentation/git-rebase.txt @@ -8,8 +8,8 @@ git-rebase - Reapply commits on top of another base tip SYNOPSIS -------- [verse] -'git rebase' [-i | --interactive] [] [--exec ] [--onto ] - [ []] +'git rebase' [-i | --interactive] [] [--exec ] + [--onto | --keep-base] [ []] 'git rebase' [-i | --interactive] [] [--exec ] [--onto ] --root [] 'git rebase' --continue | --skip | --abort | --quit | --edit-todo | --show-current-patch @@ -217,6 +217,24 @@ As a special case, you may use "A\...B" as a shortcut for the merge base of A and B if there is exactly one merge base. You can leave out at most one of A and B, in which case it defaults to HEAD. +--keep-base:: + Set the starting point at which to create the new commits to the + merge base of . Running + 'git rebase --keep-base ' is equivalent to + running 'git rebase --onto ... '. ++ +This option is useful in the case where one is developing a feature on +top of an upstream branch. While the feature is being worked on, the +upstream branch may advance and it may not be the best idea to keep +rebasing on top of the upstream but to keep the base commit as-is. ++ +Although both this option and --fork-point find the merge base between + and , this option uses the merge base as the _starting +point_ on which new commits will be created, whereas --fork-point uses +the merge base to determine the _set of commits_ which will be rebased. ++ +See also INCOMPATIBLE OPTIONS below. + :: Upstream branch to compare against. May be any valid commit, not just an existing branch name. Defaults to the configured @@ -364,6 +382,10 @@ ends up being empty, the will be used as a fallback. + If either or --root is given on the command line, then the default is `--no-fork-point`, otherwise the default is `--fork-point`. ++ +If your branch was based on but was rewound and +your branch contains commits which were dropped, this option can be used +with `--keep-base` in order to drop those commits from your branch. --ignore-whitespace:: --whitespace=