Git 如何将已提交但未推送的更改移动到另一个分支?

Git 如何将已提交但未推送的更改移动到另一个分支?,git,Git,我在我们的主分支的孩子身上有一些未经催促的git提交。我对一个功能分支进行了重新基化,并成功地合并了导致的一些冲突,但我没有意识到重新基化不会将我留在功能分支上。如果我现在git签出特性分支,它可能会覆盖我在工作树中提交的更改,使它们处于某种状态。我可以使用“git checkout-m”,但这显然只是用于合并未提交的本地更改。我如何进入功能分支并保持我当前在主分支下的未推送但已提交的更改(而不将它们推送到主分支)?我应该使用git-rebase-on吗?如果是这样的话,我现在应该怎么做呢?我已

我在我们的主分支的孩子身上有一些未经催促的git提交。我对一个功能分支进行了重新基化,并成功地合并了导致的一些冲突,但我没有意识到重新基化不会将我留在功能分支上。如果我现在git签出特性分支,它可能会覆盖我在工作树中提交的更改,使它们处于某种状态。我可以使用“git checkout-m”,但这显然只是用于合并未提交的本地更改。我如何进入功能分支并保持我当前在主分支下的未推送但已提交的更改(而不将它们推送到主分支)?我应该使用git-rebase-on吗?如果是这样的话,我现在应该怎么做呢?我已经重新设置了无-上的基础。

您可以这样做:

  • git签出分支
    以签出要素分支

  • git reset--hard master
    立即将分支移动到与
    master
    相同的提交位置。这样做会丢失分支中的所有提交。由于您的rebase,所有这些提交都应该在
    master
    上有副本,所以您实际上不应该丢失任何东西
  • git checkout master
    到checkout
    master
  • git reset——硬原点/master
    master
    重置为原点repo上的状态。这假设您没有对
    主控
    进行任何未推送的更改。如果这样做,请用要重置为的提交id替换
    origin/master

  • 首先重申你的情况,以确保我理解正确。您在
    master
    上做了一些提交,并希望将它们移动到
    feature
    ,所以您运行了
    git-rebase feature
    ?首先,您要撤消该操作。假设您仍然签出了
    master
    ,并且从那时起没有做过任何重设,请运行
    git reset--hard ORIG_HEAD
    来撤消重设

    现在,了解将提交转移到
    功能
    分支的正确方法。创建并签出一个临时分支,这样您就不会弄乱主分支

    git checkout -b temp
    
    现在,将自上次提交以来在
    origin/master
    上所做的所有更改重新设置到
    功能上:

    git rebase --onto feature origin/master
    
    移动
    temp
    分支,就好像它是从
    功能中分支出来的一样。现在,要将更改合并到
    功能
    ,请执行以下操作:

    git checkout feature
    git merge temp
    git branch -d temp
    

    这将是一个快进合并,因为您刚刚重新设置了基础。

    “您丢失了分支中的所有提交…”我不理解这一部分。我的目标是通过将未推送的提交移动到功能分支来保持它们。“这假设您没有对主控形状进行任何未推送的更改”。同样,未推送提交是我问问题的全部原因。我看到git reset手册页中“撤消提交,使其成为主题分支”下描述了我想做的事情BrianHoltz提到的git手册页在这里:小注:在我的例子中,我想在master上开始工作并意外地在那里提交之后,将提交移动到一个新的分支。为此,您可以使用
    git checkout-b new branch
    作为步骤1(将
    -b
    标志添加到
    git checkout
    创建一个新分支)并跳过步骤2(因为您已经与主分支处于同一提交状态)。而不是重复。对于已经提交的更改来说,这是一个非常不同的问题,更不用说已经经历了错误的重新基址。