Git 将已完成一半的工作推给回购是一种不好的做法吗?

Git 将已完成一半的工作推给回购是一种不好的做法吗?,git,git-flow,Git,Git Flow,今天,我与一位同事进行了一次讨论,他批评我将破坏应用程序的代码推送到我们存储库中的一个功能分支 基本上,我一直在替换一个在我们的应用程序中广泛使用的库。这是一个在几天内花费了相当多时间的更改,因此我将其分为几个有意义的提交,但并不是所有提交都使应用程序处于工作状态,例如,可能有一些中断的单元测试或一些编译错误。我通常会尽可能快地将每个提交推送到服务器,以保留备份 今天发生的事情是,一位同事错误地将我的分支合并到主分支中,不出所料,应用程序对他不起作用。据他说,我不应该把任何破坏应用程序的东西推到

今天,我与一位同事进行了一次讨论,他批评我将破坏应用程序的代码推送到我们存储库中的一个功能分支

基本上,我一直在替换一个在我们的应用程序中广泛使用的库。这是一个在几天内花费了相当多时间的更改,因此我将其分为几个有意义的提交,但并不是所有提交都使应用程序处于工作状态,例如,可能有一些中断的单元测试或一些编译错误。我通常会尽可能快地将每个提交推送到服务器,以保留备份

今天发生的事情是,一位同事错误地将我的分支合并到主分支中,不出所料,应用程序对他不起作用。据他说,我不应该把任何破坏应用程序的东西推到repo中,即使它是在一个功能分支中;相反,我应该把它放在我的电脑里,直到它稳定下来


这与我以前工作过的公司的做法背道而驰,所以我来向你们寻求建议。你认为这是不好的做法吗?如果是这样,您将如何处理可能在几天内没有稳定代码库的情况?

不。只要不合并分支,您就可以推送所有内容。 有些重构需要通过ci/cd进行处理以进行测试等。 或者你需要推动,以便开始基于工具的审查等

如果不希望合并分支,可以定义前缀(例如WIP)并防止合并此类分支


让计算机上的所有东西都保持工作状态——一旦其他开发人员开发了你的项目,你就会下地狱。当你生病时,没有人可以接手,等等。

不。只要你不合并你的分支机构,你就可以推动一切。 有些重构需要通过ci/cd进行处理以进行测试等。 或者你需要推动,以便开始基于工具的审查等

如果不希望合并分支,可以定义前缀(例如WIP)并防止合并此类分支


让计算机上的所有东西都保持工作状态——一旦其他开发人员开发了你的项目,你就会下地狱。当你生病时,没有人可以接手,等等。

这最终取决于你团队的工作流程,什么是允许的,什么是不允许的,但是我想说的是,以下情况很常见:

要素分支并非始终处于稳定状态 如果是的话,它们就不会处于发展阶段;或者,您必须主动保留对上游存储库的更改

Git被用作备份 如果将未完成的更改推送到远程存储库,则可以免费备份数据

功能分支已清理 当分支在大量开发之后变得过于杂乱无章时,可以通过组合挤压或拆分它们来重写提交,然后强制将git push-force与lease一起推送到功能分支以覆盖上游副本

有一个完成和合并要素分支的过程 通常称为拉请求或合并请求,作为功能分支的开发人员,您可以积极地促进您的更改,以备审查,并可能包含在主分支中

简单地假设您的分支已经准备好,并且在没有测试/审查的情况下将其合并到master中是相当粗心的。也就是说,直到这是一个你明确同意的工作流——但是我不认为这个行业是最佳实践。
一些Git托管平台还允许通过PR/MRs强制执行更改,一些平台甚至禁止合并遵循特定名称方案的分支机构,例如包含WIP。

最终取决于您团队的工作流程,允许或不允许什么,但我想说,非常常见的是:

要素分支并非始终处于稳定状态 如果是的话,它们就不会处于发展阶段;或者,您必须主动保留对上游存储库的更改

Git被用作备份 如果将未完成的更改推送到远程存储库,则可以免费备份数据

功能分支已清理 当分支在大量开发之后变得过于杂乱无章时,可以通过组合挤压或拆分它们来重写提交,然后强制将git push-force与lease一起推送到功能分支以覆盖上游副本

有一个完成和合并要素分支的过程 通常称为拉请求或合并请求,作为功能分支的开发人员,您可以积极地促进您的更改,以备审查,并可能包含在主分支中

简单地假设您的分支已经准备好,并且在没有测试/审查的情况下将其合并到master中是相当粗心的。也就是说,直到这是一个你明确同意的工作流——但是我不认为这个行业是最佳实践。 一些Git托管平台还允许通过PR/MRs强制执行更改,有些甚至禁止合并遵循特定名称方案(例如包含WIP)的分支<
/p> 一个功能分支可能共享,也可能不共享,所以不清楚您的确切意思


但基本上,只要你推送到的分支被定义为不与任何人共享,那么你就可以推送你想要的任何东西,通常它甚至可以强制推送到这样的分支。

一个功能分支可能被共享,也可能不被共享,所以你不清楚这到底是什么意思


但基本上,只要您推送到的分支被定义为不与任何人共享,那么您就可以随意推送到任何您想要的分支,通常它甚至可以强制推送到这样的分支。

您可以推送到您所做的任何更改并发布到远程分支。只要没有人合并你的分支机构,每个人都是安全的,你就保留了备份。但对于用例,假设您在一个模块/功能中工作,该功能尚未完成,但您已将更改推送到远程。后来,您又进行了另一次更改/添加,或者完成了功能,现在出于某种原因,您需要知道在现有代码中所做的更改。你会怎么做?您必须完成针对单个功能所做的所有提交,如果您有多次更改/编辑的代码段,这将非常麻烦。
但是,如果您只有一次提交,那么修改更改就会容易得多,而且耗时更少。

您可以将所做的任何更改推送到远程分支。只要没有人合并你的分支机构,每个人都是安全的,你就保留了备份。但对于用例,假设您在一个模块/功能中工作,该功能尚未完成,但您已将更改推送到远程。后来,您又进行了另一次更改/添加,或者完成了功能,现在出于某种原因,您需要知道在现有代码中所做的更改。你会怎么做?您必须完成针对单个功能所做的所有提交,如果您有多次更改/编辑的代码段,这将非常麻烦。
但是,如果您只有一次提交,那么修改更改就会容易得多,而且耗时也会少。

很好的解释。但是,虽然它取决于团队工作流如何准确地处理流程,并且开发人员应该在团队/环境中工作,但如果这是一种不好的做法,它并不取决于团队的工作流。只因为一次做了疯狂的事,正确的做法永远不会出错;很好的解释。但是,虽然它取决于团队工作流如何准确地处理流程,并且开发人员应该在团队/环境中工作,但如果这是一种不好的做法,它并不取决于团队的工作流。只因为一次做了疯狂的事,正确的做法永远不会出错;我不同意。如果您想要一次提交,您可以在合并回主功能时将功能分支上的多个提交压缩为一次提交。如果您不想这样做,因为即使是功能分支中的历史记录也是有价值的,您也不必这样做。在以后的时间点丢弃信息总是可能的。不提交多天只是为了有一个更好的历史是没有选择的…你的观点是正确的,但我的意思是在一个特定的区域多次提交文件更改,比如说逻辑错误或打字错误,你不会得到整个更改日志,即完整的更改大图。这是真的。因此,你可以用锤子或壁球改写历史。我不同意。如果您想要一次提交,您可以在合并回主功能时将功能分支上的多个提交压缩为一次提交。如果您不想这样做,因为即使是功能分支中的历史记录也是有价值的,您也不必这样做。在以后的时间点丢弃信息总是可能的。不提交多天只是为了有一个更好的历史是没有选择的…你的观点是正确的,但我的意思是在一个特定的区域多次提交文件更改,比如说逻辑错误或打字错误,你不会得到整个更改日志,即完整的更改大图。这是真的。因此,你可以用锤子或壁球重写历史。错误地合并,然后责怪你,听起来不是一个合适的过程。最重要的是团队确定您的流程,并遵循该流程。我个人同意被接受的答案中的讨论。错误地合并然后指责你听起来不合适。最重要的是团队确定您的流程,并遵循该流程。我个人同意接受答案中的讨论。