Git 将开发分支与生产版本的主分支合并

Git merging development branch with master for production versions

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

我有一个开发分支,我在上面做所有肮脏的开发。

每次我向世界发布一个生产版本,我都想把它放在我的 master 分支下。

问题是每当我合并 development 和 master 时,master 都会收到所有的开发历史。

我想保持一切干净,所以树枝看起来像这样:

发展

"init commit"

"developing"

"Version 1.0"

"bug fixing"

"bug fixing"

"Version 1.1"

大师

"Version 1.0"

"Version 1.1"

可能吗?如果是这样,怎么做?

更新 我尝试使用 Gauthier 答案,但它并没有像我想要的那样工作。

我采取的步骤如下: 1. 在 master 中创建了一个 init commit 2.转为开发。 3.添加了一些开发承诺。 4.结帐师傅 5. git合并开发--no-ff

合并成功,但是当我在我的存储库的高层查看时,我看到在我的 master 分支中我有开发分支的所有历史,而我只想有 init---- -版本 1.0.

这是其外观的屏幕截图:

开发分支:

主分支:

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

解决方案:

  • 但是,仍然可以为 master 创建新的 "clean" 提交,这挤压了许多 "dirty" 开发提交。见 this solution.

  • 如果您想要一个 "clean" 存储库,请考虑创建另一个 public 存储库。您可以只复制每个新版本并为其提交提交。

你知道--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 中的内容时,使用 --no-ff 合并到 master,并标记:

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

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

首先让我说你不应该这样做:) 您可以使用 git 的 --squash 参数合并并重新提交一次提交中的更改以及您想要的消息。此时你将不得不重置 --hard 你的开发分支到 master 分支以避免下次将开发分支合并到 master 分支时合并相同的更改。

第二种方法是避免编写 "Make changes to the code" 之类的提交消息,或者在 feature/work 在开发分支上完成后压缩临时提交,然后合并到 master。

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