我正在使用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。
这是它的外观屏幕截图:
开发分支:
主分支:
答案 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 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
中的内容时,请使用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)