同步两个仅有几个文件不同的 GIT 分支

发布于 2024-08-25 06:29:28 字数 121 浏览 4 评论 0原文

我为当前项目定义了几个分支,其中除了主分支之外的所有分支与主分支的区别仅在于相同的一小组文件(少于十个)。

在 master 中实现新功能后,我想以最少的努力将这些更改和添加复制到其他分支。这里推荐的方法是什么?

I have a couple of branches defined for the current project where all but the master branch differ from master only by the same small set of files (less than ten).

After implementing a new feature in master I would like to replicate those changes and additions to the other branches with the least effort. What's the recommended approach here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

美人如玉 2024-09-01 06:29:28

您有三个选择:

  • 合并:如果 master 的所有更改都需要在一个分支中可见,则很有趣,但情况并非总是如此

  • < code>cherry-pick:仅将某些提交应用于分支

  • rebase:如果您的分支尚未推送,则最好的解决方案 >:您在 master 之上重放分支的提交

但是:在这三种情况下,您需要签出您想要集成更改的分支,并对每个分支重复此操作。

除非您的分支是从一个分支到另一个分支:

---o             branch B1
    \
     ----o       branch B2
          \
           ----o branch B3

在这种情况下,您可以:

  • 将更改合并到最具体的分支(此处为 B3),如 本常见问题解答中建议
  • 完成 B3 上的工作
  • ,然后合并到父分支 B2 上(如果 B2 上没有发生演变,则这是实际上是快进合并)
  • 重复 B1(即:完成 B2 上的工作,git checkout B1git merge B2

You have three choices:

  • merge: interesting if all changes of master need to be visible in one branch, but that is not always the case

  • cherry-pick: to only apply certain commit to a branch

  • rebase: the best solution if your branch has not yet been pushed: you replay the commit of your branch on top of master

But: in the three cases, you need to checkout the branch where you want to integrate the changes, and repeat that for each branches.

Unless your branches are made from one to another:

---o             branch B1
    \
     ----o       branch B2
          \
           ----o branch B3

In that case, you could:

  • only merge the changes to the most specific branch (B3 here), as recommanded in this FAQ
  • finish your work on B3
  • then merge on the parent branch B2 (if no evolutions took place on B2, this is actually a fast-forward merge)
  • repeat for B1 (that is: finish your work on B2, git checkout B1, git merge B2)
老旧海报 2024-09-01 06:29:28

通常,当我在一个分支(甚至可能是主分支)上修复一些重要的事情时,如果我希望将相同的修复复制到另一个分支,我会执行 git checkout my_latest_feature 和 git merge - -no-commit master

从未尝试过cherry-pick,但我认为,这是我猜的最好方法,因为cherry-pick只会合并特定的更改,并且 git merge --no-commit master 将尝试获取整个树(甚至除了最新修复之外的其他提交)。

我总是讨厌任何篡改提交历史的命令。这就是为什么我从来没有 rebase

更新:刚刚发现了这个类似的问题:如何将提交从一个分支复制到另一个分支?

Normally when I fix some important thing on one branch(may even be master), and if I want the same fix to be replicated to another branch, I do git checkout my_latest_feature and git merge --no-commit master

Never tried cherry-pick, but I think, thats the best way I guess, as cherry-pick will only merge that specific change and git merge --no-commit master will try to get the whole tree(even other commits besides the latest fix).

I always hate any command which tampers commit history. Thats the reason why I never rebase

Update: just found this similar question: How to copy commits from one branch to another?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文