如何放弃旧的 Git Master,使用分支作为新的 master?

Enf*_*ors 4 git

我们有一个项目,我们曾经不得不稍微回顾一下 Git 历史并从旧提交开始一个新分支(我们在这里将其称为“new_branch”)。现在,所有的开发都在 new_branch 中进行,在创建分支之后,旧的 Master 就没有用了。所以现在我们有一个看起来像这样的情况:

C1 = Commit 1, C2 = Commit 2, etc.

            C1                       
             |                       
            C2                       
             |\                      
            C3 \                     
             |  \                    
            ...  \                   
             |    \                  
Master -->  C17    \                         
                    \                
                   C18               
                    |                        
                   ...               
                    |                
                   C37 <-- new_branch
Run Code Online (Sandbox Code Playgroud)

所以我现在想做的是放弃(撤消?)在分支点之后在 Master 中所做的所有提交,即 C3 到 C17。至少,这就是我认为我想做的事情?我的意思是,C3 到 C17 现在没用了,如果我可以撤消它们,那么我可以将 new_branch 合并回 Master,让 Master 再次有用。

所以我的问题是,这是实现我能够再次使用 Master 的目标的正确方法吗?我应该使用哪个命令(我在 Linux 的命令行中使用 Git)来撤消 C3 到 C17 的提交?这是一个工作项目,所以我把它做好是非常重要的。

msa*_*ord 6

最直接的解决方案是简单地强制推new_branch送到原点master

git checkout new_branch
git push -f master
Run Code Online (Sandbox Code Playgroud)

然后master通过以下几种方式之一修复您的本地:

  1. git reset --hard origin/master分行master
  2. git branch -D master不在分支上master,再次拉动以获取更新的)

在这种情况下不需要master使用new_branch.

这将(显然)抹去现有master的内容并将其替换为new_branch. 确定你的意图。


正如 Romain 在下面指出的那样,使用git branch -f可以避免局部修复步骤:

git branch -f master new_branch && git push -f origin master
Run Code Online (Sandbox Code Playgroud)

因为它也在本地移动分支指针。


与许多 git 问题一样,有很多方法可以解决这个问题,其他答案可能同样可行。

  • @Enfors 快乐。等着看其他答案,总有几种方法可以解决 git 问题,不同的工作流程具有不同的优势。如果你接受它,我会(很高兴)知道它对你有用! (2认同)
  • 优秀的答案。只是一个简洁的变体(来自 master 分支):`git branch -f master new_branch &amp;&amp; git push -f origin master`。只是为了提供实现相同解决方案的替代方法(但想法是相同的,因此不值得全面回答) (2认同)
  • @Endors 是的,这是我倾向于这样做的主要原因。一个在本地设置它的命令,一个反映远程服务器上的操作。 (2认同)

Sam*_*der 0

因此,如果您想删除 c3 - c17,您可以签出 c3,然后使用合并将新分支的更改置于其之上。然后如果你推回master那么c3 - c17就会消失