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 log
和 gitk
做的)
我的猜测是您对 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合并时)
我正在使用 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 log
和 gitk
做的)
我的猜测是您对 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合并时)