GIT Rebase是一个合作的分支?

时间:2012-06-29 22:29:31

标签: git merge rebase remote-branch feature-branch

阅读本文之后,将主要分支的更改收集到我的功能分支是有意义的: Git workflow and rebase vs merge questions

clone the remote repo
git checkout -b my_new_feature
..work and commit some stuff
git rebase master
..work and commit some stuff
git rebase master
..finish the feature
git checkout master
git merge my_new_feature

如果功能分支对我的机器来说是本地的,那么这很有用,我可以随意重写历史记录。

但是,如果我在功能分支上与其他人合作,该怎么办?现在我们的功能分支保存在远程存储库中,我们如何从主分支到我们的功能分支获得最新的更改?

所以我们合并了?或者还有另一种灵巧的GIT方法吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

您的案例有解决方案,无需切换到完全不同的工作流程。

关于从主分支到功能分支的修复,正如您已经发现的那样,最好是挑选那些特定的提交。但我更喜欢主题分支,即使是修补程序而不是在主线中修复,这样我就可以正确这些修补程序合并到他们阻止的每个功能中。

为了使功能开发历史记录尽可能干净和线性,所有协作者必须使用git pull --rebase来获取更新,这样就不会妨碍无意义的合并提交。

如果您仍希望在当前主要开发分支上重新定义协作功能分支(用于持续集成测试或其他目的)或以任何其他方式重写其历史记录,则可以在功能完成/完成后立即执行此操作合并到主分支,但您应该在新的单独的本地/私人分支中进行。

以下是如何在master的新分支中重新创建主题更改(跳过挑选):

$ git checkout -b feature_final feature # jump to a new branch for grooming
$ git rebase [-i] master                # rebase topic changes onto master

由此决定如何处理重新分支的-push上游用于QA或直接合并到master(如果你想在历史记录中明确表示,则使用--no-ff)。

答案 1 :(得分:1)

如果你一个人工作,那么rebase什么都不做。你没有提交任何新的东西。

您的合并将是一个快速合并,您可以通过

完全不检查它来实现
git push . HEAD:master

无论您是否与某人合作,将master中的工作合并到您的功能分支中都是不好的做法。它被称为反向合并。它不好的原因是你现在没有原子工作。大师的历史现在与你的功能纠缠在一起使用这个功能,比如变基,在很多情况下是不可能的。

您需要考虑您的分支策略以及您想要实现的目标。这是我的:

http://dymitruk.com/blog/2012/02/05/branch-per-feature/

您可以看到每个分支都从同一个地方开始。您有一个单独的集成分支和发布候选分支,可以混合和匹配您想要的功能,同时不会污染它们。

对于与同事合作的一个功能,它取决于功能的大小(工作的粒度)。如果它很大,您可以将上述过程应用于功能本身,而不是按任务分支。

如果它是一个小功能,你可以在该分支上合并或重组 - 这无关紧要。在这一点上,它归结为团队所熟悉的。