Git将开发分支与master合并为生产版本

时间:2015-04-30 12:41:01

标签: git git-merge

我正在使用Git进行代码版本控制。

我有一个开发分支,我正在进行所有的脏开发。

每次我向世界发布一个制作版本时,我都想把它放在我的主分支下。

问题是每当我合并开发和掌握时,master都会收到所有开发历史记录。

我想保持一切清洁,所以分支看起来像这样:

发展

“init commit”

“发展中”

“版本1.0”

“bug fix”

“bug fix”

“1.1版”

“版本1.0”

“1.1版”

有可能吗?如果是的话,怎么样?

更新 我尝试使用Gauthier的答案,但它没有按照我想要的方式工作。

我采取的步骤如下: 1.在master中创建了一个init提交 2.转而开发。 3.几乎没有提交发展。 4.结账大师 5. git merge development --no-ff

合并成功但是当我在我的存储库中查找高级别时,我看到在我的主分支中我拥有开发分支的所有历史记录,而我想只有init -----版本1.0。

这是它的外观屏幕截图:

开发分支: enter image description here

主分支: enter image description here

3 个答案:

答案 0 :(得分:2)

您知道--no-ff吗?

您目前有:

o init commit
|
o developing
| 
o Version 1.0
|
o bug fixing
|
o bug fixing
|
o Version 1.1
|
o Version 1.0
|
o Version 1.1  - development - master

(按照您的示例时间向下移动,而不是git loggitk做的事情)

我的猜测是你对master不满意,因为一切都直接在同一级别。

如果你满意的话:

o init commit
|\
| o developing
|/ 
o Merge branch 'development' - Version 1.0
|\
| o bug fixing
| |
| o bug fixing
|/
o Merge branch 'development' - Version 1.1 - development - master

然后当您要发布development中的内容时,请使用master合并到--no-ff,然后标记:

$ git checkout master
$ git merge development --no-ff
$ git tag "v1.0"

请注意,您应该考虑使用以您正在处理的功能命名的分支,而不是development中的所有内容。这将导致更好的合并消息,例如“合并分支'killer_feature'”。也许这就是你在development中所拥有的,在这种情况下,抱歉。

答案 1 :(得分:0)

这在同一个存储库中是不可能的。所有分支都拥有相同的共同历史。 Git分支不是您提交的单独副本,而是一种轻量级解决方案,可以尽可能多地重用现有数据。

解决方案:

  • 但是,仍然可以创建新的" clean"承诺为主人,挤压许多"脏"开发承诺。请参阅this solution

  • 如果你想要一个"清洁"存储库,考虑创建另一个公共存储库。您可以复制每个新版本并为其提交提交。

答案 2 :(得分:0)

首先让我说你不应该这样做:) 你可以使用git merge的--squash参数,并在一次提交中使用你想要的消息重新提交更改。此时,您必须重置 - 将您的开发分支硬件保存到主分支,以避免在下次将开发分支合并到主分支时合并相同的更改。

第二种方法是避免编写提交消息,例如“对代码进行更改”,或者在开发分支上完成功能/工作后压缩临时提交,然后合并到主服务器。

P.S。 git log master --merges会以你想要的方式为你提供master的历史记录,你不会丢失你的git历史记录(假设你的合并消息没问题,你在合并时使用--no-ff)