【问题标题】:Git reset master to to some other branch's codeGit 将 master 重置为其他分支的代码
【发布时间】:2021-02-03 02:24:47
【问题描述】:

几天前,我错误地将一个 dev 分支合并到 master 并推送了很多提交。 暂时我从名为“master_old”的 master 的旧提交(在开发合并之前)创建了新分支,并将其用于部署。

say master has commits 1,2,3,4,5 (3,4,5 are unwanted ones from dev)

master_old has commits 1,2,6,7,8 

I want the master to have 1,2,6,7,8

现在我想切换回 master 但我希望 master 是当前 master_old 的精确副本(没有来自 dev 合并的更改)

如何将 master 重置为 master_old 的代码?

【问题讨论】:

  • 在尝试之前进行备份。进入 .git/refs/heads 并将 master_old 文件复制到 master?

标签: git github git-reset


【解决方案1】:

让我们保持简单:

# start from master
git checkout master

# create a backup
git branch backup_master

# move master's ref
git reset --hard master_old

【讨论】:

    【解决方案2】:

    首先,您需要确定是要重写 master 分支的历史记录,还是添加新的提交以使 master 的状态保持应有的状态。如果你已经发布了 master 分支(push to origin)并且很可能有人拉了 master 分支,你不应该重写历史。

    如果可以重写历史,请按照 RomainValeri 的回答。

    要添加新提交而不重写历史记录,请执行以下操作:

    git checkout master
    git reset master_old .
    git commit
    

    解释:命令 'git reset master_old .'使用 master_old 的提交状态加载索引(暂存区)。然后,当您提交时,会使用该索引状态将新的提交添加到 master。

    Master 现在看起来像这样:1,2,3,4,5,9,commit 9 撤消 3,4,5 并添加来自 6,7,8 的更改

    【讨论】:

      【解决方案3】:
      1. 您必须重置master 的头部。 3 有命令将头部收回到2 提交。运行此命令时,您必须在 master 上。
      • git reset --soft HEAD~3
      1. 存储更改以避免冲突。
      • git stash
      1. 现在使用 master_old 进行变基,而您使用的是 master
      • git rebase master_old
      1. 您可以弹出隐藏的更改
      • git stash pop
      1. 现在你的主人将是 - 1, 2, 6, 7, 8

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-03
        • 2018-08-27
        • 2011-09-09
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 2016-04-30
        相关资源
        最近更新 更多