【问题标题】:Git: Move a few of the last commits to a new branch and then create a patch for themGit:将一些最后的提交移动到一个新分支,然后为它们创建一个补丁
【发布时间】:2011-09-29 10:53:53
【问题描述】:

我做了一些提交,现在我希望它们(比如从分支中的一些提交)将它们移动到一个新的分支中,即:

 master - O1-O2-O3-X-C1-C2-C3 

成为

master - O1-O2-O3-X  
                   \ new_branch - C1-C2-C3

之后,我需要为提到的提交(C1、C2、C3)打补丁,以便我的一个朋友能够将它们应用到他们的树上。

至于第一部分,我想我应该这样做:

  1. 为 x -> C3 创建补丁
  2. 重置为 X
  3. 创建分支
  4. 应用补丁

尽管here 他们建议我可以使用git branch new_branch; git reset --hard X; git checkout new_branchreset --hard 不会删除我的提交吗?

我不太擅长 git,无法在没有指导的情况下完成所有操作。谢谢!

【问题讨论】:

  • 建议的序列工作正常,因为 new_branch 现在指向提交并防止它们被垃圾收集。不过,更一般地说,如果您不确定 git 中的某些内容,请创建一个测试存储库,启动 gitk 并尝试一下。最坏的情况 - 您使用测试存储库(大不了)。另一件值得一提的是,您可以使用 git clone --mirror 镜像您当前的存储库。这为您提供了备份,以防万一您搞砸了。只需从您的镜像中一次又一次地运行 git remote update ,一切都会好起来的 :)

标签: git branch patch


【解决方案1】:

没有reset --hard 不会删除您的提交,因为它们仍会被“new_branch”分支引用。
(这意味着,通过“new_branch”结帐,您将恢复并再次看到这些提交)

但它会删除工作树中任何未跟踪的更改,因此请确保在键入该命令之前没有任何正在进行的工作。

您可以在“What will git checkout master + git reset --hard do?”中查看该命令序列的更详细说明。


要完成 Stuart Golodetz 的评论,如果 git reset 已删除或删除任何提交,您仍然可以使用 git reflog 获取这些提交。
见:

【讨论】:

    猜你喜欢
    • 2011-11-24
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    相关资源
    最近更新 更多