将我对当前分支的所有更改移到Git中的新分支

将我对当前分支的所有更改移到Git中的新分支,git,branch,Git,Branch,我开始在我的主分支上进行我认为是一个小错误修复的工作。然而,它已经失去了控制,我希望我当初能创建一个单独的分支来进行开发 所以现在我想做的是: 创建一个名为(比如)“edge”的新分支 将主机上所有已更改/未跟踪的文件移动到边缘(这样主机从我开始修复错误时起保持不变) 在edge上完成我的工作,合并回master 我该怎么做呢?如果您还没有做出任何承诺,那么您已经处于正确的位置 创建新分支:git checkout-b edge 你的文件没有改变。只需像往常一样添加和提交所需的内容 在edge上

我开始在我的主分支上进行我认为是一个小错误修复的工作。然而,它已经失去了控制,我希望我当初能创建一个单独的分支来进行开发

所以现在我想做的是:

  • 创建一个名为(比如)“edge”的新分支
  • 将主机上所有已更改/未跟踪的文件移动到边缘(这样主机从我开始修复错误时起保持不变)
  • 在edge上完成我的工作,合并回master

  • 我该怎么做呢?

    如果您还没有做出任何承诺,那么您已经处于正确的位置

  • 创建新分支:
    git checkout-b edge
  • 你的文件没有改变。只需像往常一样添加和提交所需的内容
  • edge
    上完成提交后,使用
    git checkout
    git merge edge
    切换回
    master

  • 为了补充JB的答案,如果您已经开始在master上提交一些最终成为“边缘”工作的内容,您可以:

    git stash
    git checkout -b edge master
    git branch -f master SHA1_before_your_commits
    git stash apply
    

    如果您试图将工作从master转移到已经存在但在master之后的分支,git将不允许您切换到另一个分支。在这种情况下,请执行以下操作:

    git stash
    git checkout oldBranch
    git merge master
    git checkout master
    git stash apply
    git checkout oldBranch
    

    严格来说,隐藏包装器不是必需的,只是用于未提交的工作更改,对吗?@HaveAGuess-right。通过“接受我所有的更改”,我还包括了当前尚未添加的更改。因此隐藏。第二行和第三行不能折叠成“git checkout-b edge master”吗?@PaulLynch考虑到那些应该在
    edge
    上的提交(在
    master
    上)在
    master
    上,是的。我已经编辑了答案。我看不出
    git stash
    在这里有什么用处,因为使用
    git checkout-b
    根本不会修改工作树…还没有提交任何内容,所以第一行是一个受欢迎的场景。。。哎哟,那其实挺无痛的:——)