git - Git分支,结帐和合并,试图了解它的使用
问题描述
作为一个没有经验的 git 用户,我试图理解为什么在本地存储库中使用新分支并在更改准备好时将其与 master 合并。我的假设是否正确,当您在完成本地工作后想要将主分支推送到远程存储库并且您收到主分支“已过时”的消息时,这特别有用?换句话说:
- git 将 repo 克隆到我的本地机器
- git 分支 new_branch
- git checkout new_branch
- 在我完成 new_branch 的工作后:git checkout master
- git 合并 new_branch
- git push 到远程仓库
- 提示您的工作落后的消息,因为在我克隆存储库后其他人进行了更改
- 混帐拉;现在我的本地主分支是最新的
- git 合并 new_branch
- git push 到远程仓库
- 没事的时候,我可以删除我的本地 new_branch
我的想法对吗?我的第 7 点是您应该始终在新创建的本地分支而不是本地主分支中进行更改的主要原因吗?所以新的本地分支作为你的更改的备份,你可以再次与主分支合并?
希望它解释得足够清楚。
谢谢,卢克
解决方案
作为一个没有经验的 git 用户,我试图理解为什么在本地存储库中使用新分支并在更改准备好时将其与 master 合并。
这一切都是为了保持 master 作为工作的稳定基线,并通过将单独的事物分开来降低复杂性。那可能是你和其他人之间,或者你和你自己之间。很多编程都是为了不让事情纠缠在一起。
如果你突然不得不做两件事怎么办?一个紧迫的错误出现了,或者你的老板设置了新的优先级,或者你意识到如果你先做点别的事情会容易得多,或者你只是分心了。如果你一直致力于掌握,它们必须全部纠缠在一起,使一切变得更加复杂和容易出错。如果您在分支中工作,您可以在分支之间切换。
如果在进行了 6 次提交之后你意识到这不是一个好主意怎么办?如果你一直致力于掌握,你必须恢复所有的改变,希望你能得到所有的改变!如果您在分支中工作,则删除该分支。
如果您使用的是审核流程,您通常会等待一组更改进行审核。能够开始下一个任务就好了。如果您一直在研究 master,那么您将不得不处理可能会更改的未经审查的代码。如果审核发现问题怎么办?现在,您将第一个任务的修复与第二个任务的未完成工作混为一谈。
在经过审查、测试和完成之前,没有任何内容进入 master。这确保了 master 是一个稳定的平台,可以为您和从事该项目的其他所有人提供更多工作。
有关分支流程基础知识的更多详细信息,请参阅Git 功能分支工作流。
您的特定工作流程存在缺陷。拉动后无需重新合并。
- git 分支 new_branch
- git checkout new_branch
- 这可以组合为
git checkout -b new_branch
- 这可以组合为
- 在我完成 new_branch 的工作后:git checkout master
- git 合并 new_branch
- git push 到远程仓库
- 提示您的工作落后的消息,因为在我克隆存储库后其他人进行了更改
如果有多个人在处理 repo,则在合并之前应该有一个审查步骤。这会让更多人关注代码,让更多人知道你在做什么,并防止人们偏离正题。
在 Github 上,这些是Pull Requests。
合并是在“服务器”上完成的,因此您可以立即拉出新的主服务器。
- 混帐拉;现在我的本地主分支是最新的
git 合并 new_branch
额外的合并是主要错误。您的分支已经在本地合并到 master 中。git pull
不会清除它,它会将远程主机与本地主机合并。这包括您的合并分支。
- git push 到远程仓库
没事的时候,我可以删除我的本地 new_branch
在此工作流程中,由于您没有审核步骤,因此推送和拉取大多与分支/合并过程无关。您正在自己进行集成。您可以在合并后立即删除分支。
这是基本的独奏工作流程。
- 工作。
- 更新。
- 测试。
- 合并。
- 分享。
并且更详细。
- 工作。
- git checkout -b 功能
- 做小的、有重点的提交,每个都做一件事情。
- 更新
- 尽可能多地这样做,以免落后。
- 更新主
- git结账大师
- git 拉
- 更新功能
- git结账功能
- git 合并大师
- 测试
- 尽可能多地测试,可能比你想要的多。
- 合并
- 功能是完整的、经过测试的并且是最新的。
- git结账大师
- git合并功能
- git 分支 -d 功能
- 分享。
- git 推送
在将工作施加于他人之前确保工作已完全完成是很好的。只有在您的工作完成并更新后,您才会推送.
这涵盖了基础知识。有许多方法可以简化和改进此工作流程。即使在单独工作时,也可以考虑在您正在使用的任何系统中使用 Github 拉取请求或等效项。
推荐阅读
- javascript - 使用 python 和 selenium 无法与 keybord 和 .getAttribute 交互,为 data-* 属性返回 null
- wordpress - 如何从 WordPress 中的下一个/上一个帖子中删除私人帖子?
- javascript - best_in_place 在 Heroku 上不起作用,并且没有出现错误
- ios - 使用 Firebase 密钥执行以下操作会产生过高的成本吗?
- facebook - Facebook 客户聊天插件未出现
- powershell - 如何在 Powershell 中更改扩展文件?
- python-3.x - 如何解决ubuntu中的时间模块
- angular - 在 Angular 7 中读取来自 POST 请求的响应
- c++ - 仅为某些模板特化定义转换运算符:预期类型/预期类型说明符
- objective-c - 本地对象在返回完成块之前变为 nil - Objective C