【问题标题】:Remove commits from master again再次从 master 中删除提交
【发布时间】:2014-03-09 05:51:01
【问题描述】:

我将我所有的东西都提交给了 feature/1234 这样的特殊分支。一个我们认为已经完成的功能随后被合并到 master 中。 此功能需要再次返回开发,但 master 中还有其他提交需要立即上线。

我怎样才能从 master 中获取这些单个提交并仍然将它们保留在 feature/1234 中?

编辑:来自 feature/1234 的提交不是最新的。

【问题讨论】:

    标签: git git-merge


    【解决方案1】:

    了解问题后再编辑

    git rebase 是你的朋友。只需运行git rebase -i commit-id,其中commit-id 是您要删除的三个之前的一个,然后,当默认编辑器打开时,只需删除您不希望在 master 上的三个提交,保存并关闭。

    旧版本,误解
    如果我理解了,你的第二个请求应该没有问题:如果你没有删除分支,提交仍然在feature/1234
    至于第一个请求,去掉commit,直接运行 git reset --hard HEAD~1 会将 HEAD 移回一个提交。
    如果你想通过它的 id 返回一个特定的提交,你可以运行git reset --hard commit-id
    有关重置的更多信息:http://git-scm.com/blog/2011/07/11/reset.htmlhttps://www.kernel.org/pub/software/scm/git/docs/git-reset.html

    【讨论】:

    • 这对我来说在本地有效,但我无法推动它:(有什么想法吗?
    • git push -f,强制推送到远程。但是,请注意 Magnus 的说明!如果您认为您的任何同事拉错了主人,您应该让他们force-pull清理他们的历史。抱歉耽搁了,我正在开会
    【解决方案2】:

    如果你可以重新设置你的分支,那么这有时是删除提交的最干净的方法——它的所有痕迹都会消失。缺点是在有问题的提交进入和您删除提交之间从您的主分支获取的任何分支都将具有与主分支不同的历史记录。如果您不能保证这没有发生(例如,如果您已将您的 repo 发布给其他人),那么最好使用git revert 恢复提交。这将在您的 master 之上产生一个新的提交,从而撤消旧提交的更改。历史因此不断向前发展,子分支可以像往常一样简单地变基到最新。

    【讨论】:

    • +1 表示我在回答中忘记的注释 If you can rebase your branch
    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 2015-02-03
    • 2015-11-15
    • 2013-11-28
    • 1970-01-01
    相关资源
    最近更新 更多