Git 如何解释分支+;合并优于连续拉动+;推动多人参与的分支?
假设有一个分支,多个开发人员正在进行工作,称为Git 如何解释分支+;合并优于连续拉动+;推动多人参与的分支?,git,Git,假设有一个分支,多个开发人员正在进行工作,称为TestBranch 现在,有两种(主要)方法可以让多人在此分支上工作。(还有重新定基,但我暂时忽略了这一点) 1: 开发人员进行更改 在推送之前,他们使用git pull origin TestBranch(或者只是git pull)从其他人那里获取最新的更改 处理任何合并冲突 git-push-origintestbranch(或者只是git-push),这样其他人都可以得到他们的更改 2: git checkout-b MyBranch(
TestBranch
现在,有两种(主要)方法可以让多人在此分支上工作。(还有重新定基,但我暂时忽略了这一点)
1:
- 开发人员进行更改
- 在推送之前,他们使用
(或者只是git pull origin TestBranch
)从其他人那里获取最新的更改git pull
- 处理任何合并冲突
(或者只是git-push-origintestbranch
),这样其他人都可以得到他们的更改git-push
(或一个分支,然后是checkout)来创建自己的个人分支git checkout-b MyBranch
- 当他们完成了一个子任务时,他们会执行
git checkout TestBranch
获取git pull
上的最新更改(不会触发任何合并,因为它们没有触及TestBranch
,只是一个TestBranch
)快进
git merge MyBranch
- 处理任何合并冲突
这样其他人都可以得到他们的更改git推送origintestbranch
(或者,如果我错了,请尽管告诉我)首先,以下是我的个人观点,我从经验中知道,讨论git工作流可能是一个非常热门的话题,因为有些决定是符合口味的
然而,已经有一些(非常常见的)分支策略(工作流)来处理这个和其他问题。对一些模型有很好的概述 对于您的具体问题,如果您希望有一个干净的git历史记录,并且只处理一个分支,那么您是否考虑过在
git push
之前执行git pull--rebase
(假设您正在处理TestBranch
)?这将为您提供一个“良好”且直接的提交历史记录,而不会引入任何开销(无论如何都需要修复合并冲突)
如果人们处理特定的块(比如新特性或错误修复),引入“特性”或“修复”分支通常是个好主意,类似于(2)中的建议。这也为提交增加了一个很好的范围,所以当分支有一个明确的名称时(比如说功能/工具提示
),您可以立即知道在哪里也可以查找该功能的更改。与您的建议不同的是,分支的范围不是由处理它的用户确定的,而是由它包含的特性/修复程序确定的。因此,这可能会导致多个(但通常很少,因为这些分支应该是短期的)开发人员在一个分支上工作
另外,如果我正确理解了您的两种方法,那么这两种方法将创建相同数量的合并冲突和分支,因此我看不出(2)有什么改进。使用rebase拉是#1的简单性,没有糟糕的提交历史记录。老实说,对于分支寿命很短的情况,这是一个很好的解决方案。(简单的修复,无需长时间计划就可以来回工作,等等)。我在想这是否会有问题,但我看不出有什么直接的问题。谢谢我以前使用过它,但在这个案例中没有想到。我们目前工作场所的设置是一个名为
develope
的“主”分支,它有一个git pull--rebase
-git push
工作流,用于直接提交到分支(通常是短期修复/feaures)。更大的更改会进入它们自己的作用域分支。这是一个非常常见的工作流(称为gitflow
),使用它一段时间后,我也看不到任何问题,而且有人可能(完全!)不理解重定基址的概念(一开始不容易)。有没有好的方法来论证这种工作流为什么好?这是原始问题的一个重要部分。它正在避免哪些常见的陷阱?或者解释已经在Atlassian上了。我强烈建议阅读Atlassian的文章,但是,我认为最大的优势是非常干净的git历史,便于跟踪更改。如上所述,添加特定于主题的特性和修复分支还增加了另一个级别的范围(在某种意义上通常意味着顺序)。根据您将如何合并功能分支(有几个选项,“最干净”的选项可能是将分支重新定位到develope
,然后将合并或压缩提交到develope
,这将产生一个非常容易理解的日志。