如何使用git发布版本控制版本

时间:2013-09-24 21:53:10

标签: git version-control

我有一个小小的项目,用Git维护它的版本控制。 这里的术语版本控制是指您可以想象的最简单的形式: 仅在主分支上生成提交,并在一天结束时将所有提交推送到远程。 到现在为止还挺好。只有一个主分支就足够了,因为应用程序的最新状态始终是必需的。

然后,采购员告诉我他们需要v1.1和v1.2。问题是最新的主提交包含v1.1的所有内容和v1.2的一些撤消内容。

我的第一个目的是找到两个'functional-pack'分歧的基本提交。 我从那个提交创建了两个分支,然后我开始逐个挑选基础上的提交。幸运的是,它们并不多。 这导致两个分支(v1.1和v1.2)保持适当的位置,除了我必须将v1.2重新定义到v1.1,因为v1.1中的功能也需要在v1.2中

毕竟,我有以下历史:

enter image description here

正如你所看到的,我有一个'悬空'分支,实际上是主人,但我不需要那些提交,因为所有这些都被挑选到了正确的位置。

问题只是:如何优雅地处理这种情况(基本上删除那些不必要的提交)而不造成任何伤害,还是有其他方法可以实现相同的结果?

3 个答案:

答案 0 :(得分:1)

今年在ThatConference上有一个非常好的谈话(幻灯片在链接上可用):http://www.thatconference.com/sessions/speaker_188主持人确实遇到了这个问题并描述了她是如何用git解决它的。

基本上,你真的不应该在你描述的工作流程中工作,以实现你想要的。更好的方法是让存储库中的每个分支代表各个功能。然后将这些功能在合并提交中捆绑到master或合并分支中,并使用您的版本号标记该功能。

尽管听起来毫无用处(显然你已经使用当前的工作流程创建了历史记录),但它对未来可能会有用。

答案 1 :(得分:1)

我认为最好的解决方案,我希望我能正确地解决它是git rebase

以下是rebase分支的一些信息。

要获得工作流程的另一个很酷的解决方案,您应该查看gitflow

答案 2 :(得分:0)

听起来你觉得这不是一个理想的情况。不过不用担心 - 解决方案非常简单。

能够拿出一把斧头然后开始砍掉主人的大量不同提交然后将你的工作合并到主人那将是很好的。不幸的是,我怀疑这对任何同事来说都会很好,因为当他们试图将他们的变化合并到主分支时,这会导致冲突(甚至可能是文字冲突)。因此,不要重写历史记录,最好是进行新提交

  1. 首先运行git checkout master
  2. 移至主分支
  3. 然后,从项目的根目录运行git checkout -f <commit> .,其中<commit>表示提交的SHA哈希,并显示消息“在测量列表单元格渲染器中更改了活动的pst颜色”(例如,看起来像类似于:7cd052c)。注意末尾的点表示从指定的提交中检出当前目录的版本。
  4. 最后一步更改了工作目录中的文件,以反映他们在分歧开始的共同祖先所处的状态。现在,让我们用git commit -a提交它。
  5. 此时您应该能够合并回主人而不会发生任何冲突:git merge v12
  6. 从现在开始,您可以将您所做的任何其他更改合并到主分支中!