代码之家  ›  专栏  ›  技术社区  ›  snazzybouche

创建没有旧提交的分支

git
  •  0
  • snazzybouche  · 技术社区  · 6 年前

    我在commit O1上建立了一个存储库来修复其中的一个bug。我向master branch提交了两份文件B1和B2。

    O1 -> B1 -> B2
    

    后来,我决定添加一个新功能。我又向主分支添加了一些承诺。

    O1 -> B1 -> B2 -> F1 -> F2 -> F3
    

    我目前正在使用这个新版本,它包含了错误修复和功能。

    我想为我添加的功能向原始存储库发出请求。然而,错误修复是完全无关的,不应该包括在内。起初我并不想分享我的修改,所以,像个傻瓜一样,我在master branch中做了所有这些。从那以后我吸取了教训。

    如何制作只包含该功能的分支/对象:

    O1 -> F1 -> F2 -> F3
    

    ...这样我就可以用它发出拉取请求,同时还可以维护一个既有功能又有我可以自己使用的错误修复的版本?

    0 回复  |  直到 6 年前
        1
  •  3
  •   Aasmund Eldhuset    6 年前
    git rebase B2 F3 --onto O1
    

    这基本上是说“切断 F3 一直延伸到树枝分叉的地方 B2 ,并将其粘贴在 O1 ."

    请注意,当您执行此操作时,当前分支是什么并不重要(尽管您不能有任何未完成的更改),但如果您已经在运行 F3 ,可以忽略该参数,该参数默认为当前分支:

    git rebase B2 --onto O1
    
        2
  •  2
  •   eftshift0    6 年前

    我可以这样做

    git rebase --onto O1 B2 F3
    

    你要求在O1基础上重新设置F3,放弃B2之前的修订。

        3
  •  0
  •   Christian Fosli    6 年前

    我愿意(和你一起)去 master 布兰奇退房了 F3 存在 HEAD )

    git checkout -b feature
    git rebase -i HEAD~6
    

    选择 drop 对于 B1 B2