【问题标题】:Take all my changes on the current branch and move them to a new branch in Git将我对当前分支的所有更改移动到 Git 中的新分支
【发布时间】:2013-03-20 14:15:16
【问题描述】:

我开始着手对我的主分支上的一个小错误进行修复。然而,它已经失控到我希望我首先创建一个单独的分支来进行开发的地步。

所以现在我想做的是:

  1. 创建一个名为(比如说)“edge”的新分支
  2. 将 master 上所有已更改/未跟踪的文件移动到边缘(这样 master 从我开始修复错误时就没有改变)
  3. 在边缘完成我的工作,重新合并到 master

我该怎么做?

【问题讨论】:

    标签: git branch


    【解决方案1】:

    如果您还没有提交任何内容,那么您已经处于正确的位置。

    1. 新建一个分支:git checkout -b edge
    2. 您的文件没有改变。只需git add 照常需要并提交即可。
    3. 完成对edge 的提交后,使用git checkoutgit merge edge 切换回master

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 存储包装器并不是绝对必要的,只是用于未提交的工作更改,对吧?
      • @HaveAGuess 对。通过“接受我所有的更改”,我还包括了当前尚未添加的更改。因此是藏匿处。
      • 第二行和第三行不能折叠成“git checkout -b edge master”吗?
      • @PaulLynch 考虑到那些应该在edge 上的提交(在master 上)master 上,是的。我已经编辑了答案。
      • 我看不出git stash 在这里有什么用处,因为使用git checkout -b 根本不会修改工作树...
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-11-03
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-12
        • 2020-06-03
        • 2013-02-28
        • 1970-01-01
        相关资源
        最近更新 更多