git - Git 是否可以永久在同一个子分支上工作?

标签 git bitbucket git-branch git-merge

高层背景:

我的工作场所已经存在了几十年,这里的许多员工也是如此。我今年早些时候加入,但在其他地方有丰富的经验。

早在我的第一份工作中,我就自学了 Git,这本质上是一个 2 人项目。我搞砸了很多事情,也练习了很多事情,所以我来自于艰苦的学校。正如我在给一些部门负责人的电子邮件中所写的

[…] I am not a git expert. For better or worse, though, in this company I am :\ […]

我们刚刚从一种更过时的源代码控制(锁定文件、复制文件等的控制)切换到 Git/Bitbucket。大多数人(和老前辈)正在适应新的协议(protocol),我和其他一些人正在尽我们所能提供帮助。

与我打交道的人:

有一个家伙,一个年长的家伙,脾气暴躁。我和他相处得很好,但他是个很难对付的人。他不想学习新东西,他希望事情变得简单。顺便说一句,这不是一个愚蠢的人,自从 C++ 发布以来,他一直在用 C++ 进行编程,除此之外,他还编写了我们用来从我们的产品连接到数据库的驱动程序(从头开始)。他处理的许多代码都是他自己的东西,本质上是其他部门使用的库,尽管他的大部分工作都在其他人也修改的共享代码文件中。

他承认我知道我在说什么,但他是一只老狗; Git 基于“diff”的概念与实际文件的概念有他不想学习的使用场景,比如创建新分支。他想要一个简单的程序。

在我看来,我是一位非常好的老师。我曾与其他一些员工一起工作过,他们似乎现在已经明白了这一点,并且正在使用 Git/Bitbucket 编写他们的代码。

他想要什么:

回到脾气暴躁的人,他想要一个分支工作。他不想 checkout 新分支、切换分支,他不想了解分支。他希望他完成他的工作,提交,执行 pull 请求,然后继续他的工作。

这只是一个人,公司里大多数人都愿意改变。上周我和他一起坐了大约 5-6 个小时。我喜欢它,因为我们互相尊重,而且我也认为这是我的公司职责,因为我是这里最有能力做到这一点的人(许多人发现他很难说话,所以他有点在自己的泡沫中工作,而且这里没有多少人有这样的能力)我对 Git 的熟悉程度)。此外,他还专注于 Git 的一些核心基础知识,例如暂存、本地与远程等。

虽然并不理想,但如果他经常从主分支 merge 到自己的分支中,并在可预见的 future 只在他的一个分支上工作,这是否是一种“足够好”的解决方法?希望随着时间的推移,我能逐渐让他成为一名优秀的“Gitizen”。最坏的情况是,这家伙可能会在几年内退休。

这个解决方法是一个定时炸弹吗?它会搞砸主分支的历史吗(这是假设所有 merge 冲突都得到正确解决;这对他来说不是问题)?

最佳答案

对于 git,功能分支 merge 回来后无需删除它。特别是如果该功能分支在 merge 到 master 本身之前直接 merge 了 master。 merge 回来后,两个分支的提示将(几乎)相同,因此 git 所感知的 future 开发的基础也是相同的。 (无论如何,什么是“功能”分支?我看到的只是父提交......)

无论您的老手继续在 merge 后的分支上工作,还是在 master 上分支一个新的分支,并没有多大区别。区别只是新工作附加的提交,以及最重要的是分支的名称。

实际上,这是 git 的主要优点之一:像 SVN 这样的旧版本控制系统在处理 merge 回方面存在相当大的麻烦,使得在分支之后无法更多地使用它已重新集成到其源分支中。

对于git来说,所有分支上的所有提交看起来都是一样的,并且它不关心哪个分支名称附加到哪个提交。当 git merge 两个分支时,它只是确定存储库的公共(public)基本状态,并将两个更改集 merge 到该基本状态。提交图仅帮助它确定公共(public)基本状态,这通常是功能分支启动的提交,或者最后 pull 的提交,但它也可以是 master pull 的提交来自功能分支。 (到底什么是功能分支?!?)

关于git - Git 是否可以永久在同一个子分支上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58822714/

相关文章:

python - setuptools-scm:当前版本而不是下一版本

当 .gitignore 中排除了父文件夹时,Git 包含任意嵌套的子文件夹

git - 如何停止在存储库中使用 Git LFS

git - Bitbucket/SourceTree 问题 > 无法从远程存储库读取

Git - 无法删除远程分支

git 无法将我的更新推送到远程

git status 忽略换行符和空格更改

暂存文件的 Git 列表

git - 为什么我的 git 日志输出在使用远程时同时显示 origin 和 origin/master、origin/HEAD。这些条目对我来说似乎是多余的

git - 如何从 git 中已推送的分支中删除所有提交?