我不确定我是否正确使用Git,所以我想知道你对我的方式有什么看法,以及如何让它变得更好
如果我想加入新功能,我正在为一个网站编程。但对于这些功能,我不需要网站的完整其余部分。所以我做的是:
- ";主";我创建了一个名为";justBasics";我删除了所有不必要的东西(这几乎是所有的东西(
- 在分支上";justBasics";我创建了我的功能Branch"特征1";。在";特征1";例如,我可以创建一个新文件,在其中写入我的功能
- 现在我想把feature1加入到master中。不好的是;特征1";还包括我只需要尝试我的功能,但不属于master的东西,所以不能将其合并到master(或者我可以使用merge吗?我不知道如何使用。(。例如,一些测试功能的代码,尤其是我删除以创建的东西;justBasics">
- 为了包括该特征,我返回到";主";并创建分支";包括特征1";。在";包括特征1";通过cherry-pick,我只得到了该功能的重要提交
- 现在我可以合并";包括特征1";掌握
这就是我的存储库最后的样子:
* c9 (master) merging branch "includeFeature1"
|
* | c8 some work on master to make this look better
| * c7 (includeFeature1)cherry picking commit c3 and c5
|/
* c6 some work on master to make this look better
| * c5 (feature1) finished feature1
| * c4 some code that is necessary to test feature1. I don´t want this code at the end in my website.
| * c3 started feature1. add a file to work in
| * c2 (JustBasics) i deleted folders, features, preparing main.html to show nothing.
|/
* c1 website til this point. that includes other features
这种方式对我来说很有效,但我在挑选樱桃时遇到了一些问题:不知怎么的,当我想结账时,一些老骗子又出现了。尤其是当我在master上时,我试图结账;JustBasics";,c2中的Hunks是我删除的所有文件夹和功能重新出现,我无法切换分支。所以我必须先删除它们,然后才能继续
如果您的代码的其余部分会打扰您,您如何开发完整的新功能
你觉得我的方式怎么样?
一般来说:git并不是为只处理repo内容的子集而设计的分支。正如您所看到的,您可以制定一个工作流,大部分都能满足您的需求,但总有一些粗糙的边缘。
如果有一个子集的代码应该单独处理,我建议将其拆分到自己的存储库中;然后它就变成了一个依赖性管理问题(即如何在构建时重新组合正确的版本(——可以用任何数量的工具来解决这个问题,如果你想要一个只有git的解决方案,也可以用子模块或子树来解决。
以下是";删除一堆文件的分支";方法:
如果你在feature1
上做了额外的工作,那么你就没有办法知道你已经在master
中挑选了哪些提交,以及你从未打算挑选哪些提交,或者你实际上想要挑选哪些新提交。好吧,但你可以使用标签来构建一个解决方案,也许还可以提交消息约定(在使用repo时还需要记住一件自定义的事情(。
如果master
上有任何更改要共享到justBasics
中,您可能会发现这很困难。合并很可能会发生冲突,因为";他们编辑了,我们删除了";。很容易解决,但每次都会发生,还有一件事需要记住。
您有点怀疑是否可以将feature1
合并回master
。如果您这样做,合并将尝试从master
中删除所有其他文件,因为删除文件是一种更改。与前面的情况一样,提交作为一个整体可能会发生冲突,但个别文件可能会被静默删除,因为它们没有在master
端进行修改。
虽然cherry-pick
在特定情况下很方便,例如,对分支进行了基本更改,但您需要这些更改,但还没有准备好将分支合并到中,但应谨慎使用(谨慎选择冲突可能会在以后引起头痛(;我通常建议不要创建依赖于定期挑选樱桃的工作流程。