如何将分支合并为主分支但继续在分支上工作?

jgr*_*ois 44 git github

我创建了一个分支来尝试不同的方法并且它有效,所以我想将"Farmcrops"分支合并为"Master"以保持这些变化,但继续"Farmcrops"分支以探索另一种可能性.这样,如果这个最新的改变不起作用,我可以回到"大师",现在包括第一轮改变.

我怎样才能做到这一点?

jub*_*0bs 63

如果我理解正确,你就是从这里开始的

-- o -- o -- o [master]
    \
     o -- o [Farmcrops]
Run Code Online (Sandbox Code Playgroud)

你不应该Farmcrops直接合并master,因为你冒着破坏代码的风险master,按照惯例,它应该更稳定.相反,签出Farmcrops并合并master到它.

git checkout Farmcrops
git merge master
Run Code Online (Sandbox Code Playgroud)

然后你会得到

-- o -- o -- o [master]
    \         \
     o -- o -- o [HEAD -> Farmcrops]
Run Code Online (Sandbox Code Playgroud)

运行一些测试; 确保一切按预期工作.然后签出master并合并Farmcrops到它:

git checkout master
git merge Farmcrops
Run Code Online (Sandbox Code Playgroud)

您的回购将如下所示:

-- o -- o -- o
    \         \
     o -- o -- o [HEAD -> master,Farmcrops]
Run Code Online (Sandbox Code Playgroud)

现在Farmcrops再次检查并继续您的实验,对其进行更多提交等等......

-- o -- o -- o
    \         \
     o -- o -- o [master]
                \
                 o -- o -- o [HEAD -> Farmcrops]
Run Code Online (Sandbox Code Playgroud)

master如果您的新实验Farmcrops不能很好地完成,您可以随时使用(现在包含"第一轮更改").

  • 这方面的视觉效果非常有用.感谢您抽出宝贵时间将它们放进去. (7认同)
  • 请注意,第二次合并不需要创建另一个合并提交,因为“Farmcrops”是“master”的直接后代。它只是移动指针(快进)。这有助于我理解图表。 (3认同)
  • 这就是为什么您应该始终阅读已接受的答案并寻找拥有更多票数的答案! (3认同)

Joë*_*min 30

这是您正在寻找的过程:

  1. git checkout master
  2. git merge Farmcrops
  3. git push origin master
  4. git branch -d Farmcrops
  5. git checkout master
  6. git checkout -b Farmcrops
  7. 继续你的分支Farmcrops...

分支只是指针,创建/删除分支非常容易,如果Farmcrops没有将分支推送到远程存储库,则绝对不会依赖它.您可以在合并后将其删除,然后从主服务器重新创建它.

希望这会帮助你.

  • 但是,你不应该将`Farmcrops`直接合并到`master`中.首先将`master`合并到`Farmcrops`会更安全,检查一切是否在那里工作,然后才将`Farmcrops`合并为`master`. (15认同)
  • 即使一切都是本地的,第一次合并也很有用,因为它促进了隔离:它为你节省了在`master`上创建"坏"提交并且不得不将`master`重置为其父级之一,或者恢复最后一次的风险承诺`master`.这是一个安全网. (4认同)
  • 为什么重建而不仅仅是继续?如果Farmcrops不仅在本地而且在服务器上(用于备份安全),则需要在本地和远程删除它,再次在本地创建它,将其推送到远程,再次跟踪它.......等等.合并成主人并继续下去很容易吗? (2认同)