我对git
相对较新,并且已经阅读了一些关于正确工作流程的内容,但我对rebase
/ {{的建议进行了一些努力1}}在推送到其他repos之前提交到单个内聚提交(例如squash
)。
我的主要问题是我是业余爱好者的程序员(如果我幸运的话,每天1-2小时),这意味着经常需要几天或几周时间才能达到凝聚力功能提交。此外,github
是我的备份。所以我的工作流程通常包括1-5个小提交(其中许多是#34;固定的愚蠢错误"品种)每晚,每晚推送一次到github
回购。似乎只发布相对干净的提交并使用github
作为备份的目标不兼容。
我只是在完成功能或错误修复时添加标签,而不是github
我的提交。在我看来,这似乎是一个合理的选择:
rebase
)作为"完成"之间的备份。提交我已经环顾四周了,但这似乎从来没有被提供作为"清理"的替代品。提交工作流程我错过了什么吗?
答案 0 :(得分:1)
我同意你的说法,重写git历史通常是一件坏事,特别是如果有其他人为你做同一个分支。
为了使用代表已完成功能或相关错误修复集的提交在主分支上维护git历史记录,我建议创建一个范围有限的分支。例如,您对master的前3次提交可能看起来像
上面列表中的第一个提交可能是您可能创建的一个名为siteSetup的分支的一系列提交,您在将其挑选到master之前已重新设置。
此示例分支siteSetup可能具有以下提交
通过使用分支机构,您可以随意“弄乱”#34;超出您的提交,只要您在将更改提交给master之前重新提交以进行清理。
答案 1 :(得分:0)
我要进入一个分支(肢体),并建议正确的做法是避免变基,急切地分支,最重要的是,与--no-ff
合并。
这个伟大的 2010 Vincent Driessen blog post 说明了一个与我想象的几乎相符的工作流程。主发布分支保持相当干净,可以轻松检查,但没有重写/丢失历史记录。关键部分是与--no-ff
的合并,这使得很容易看出哪些提交是主要提交而不是次要提交。你甚至不必标记。
然后像:
git checkout master
git log --oneline --graph --all --decorate=full
git log --oneline --graph --all --simplify-by-decoration --decorate=full
让您了解对主分支的主要修改是什么。
我仍然对git
还不熟悉,但我很难想象rebase
/ squash
在什么情况下应该优于这种方法。