【问题标题】:Collaborate using git and separate branches without adding a bunch of redundant commits使用 git 和单独的分支进行协作,而不添加一堆冗余提交
【发布时间】:2012-03-02 18:29:45
【问题描述】:

我正在与一位设计师合作开展一个名为“已验证帐户”的项目

我正在一个名为verified_accounts 的分支上进行开发,而设计器在一个名为chris_verified_accounts 的分支上。我们一直在定期合并彼此的更改,当项目完成后,我们会将 verified_accounts 合并到 master

但是,所有这些合并都导致了一堆垃圾/重复提交。例如:

http://dl.dropbox.com/u/2792776/screenshots/2012-03-02_1024.png

提交 (1) 是仅包含提交 (2) 的拉取请求的合并。这意味着这些提交本质上是相同的(它们具有相同的差异等)。同样commit(3)是只合并commit(4)的merge,意思是3和4也基本一致

管理这些相同提交的最佳方式是什么?即,对于我的代码中的每个功能更改,我想要一个关联的提交。这样,如果我在评论一个变更集,我可以确定我在正确的地方评论(而不是评论另一个完全相似的变更集)

这种事情的最佳做法是什么?

【问题讨论】:

    标签: git github collaboration git-workflow


    【解决方案1】:

    因为你合并你得到合并提交,当你合并分支时这是不可避免的。你可以做的是同时拉动和变基:

    git pull --rebase
    

    【讨论】:

    • 所以不是git pull chris_verified_accounts && git checkout verified_accounts && git merge chris_verified_accounts 我会做git checkout verified_accounts && git pull chris_verified_accounts --rebase?这将使历史看起来如何?
    • 自己试试看:)
    • 你总是可以用 git 撤销。如有疑问,请提交!只要代码已提交,您就可以撤消任何操作。如果 pull --rebase 由于某种原因不能正常工作(唯一可能发生的事情是你遇到冲突并且在解决冲突时搞砸了)你总是可以使用“git reset --hard HEAD”撤消,如果如果要撤消已解决的已出错的冲突,则要撤消冲突和“git reset --hard HEAD^”。
    【解决方案2】:

    最佳实践是将这些提交视为它们的本来面目:合并提交。不仅仅是“重复提交”。 (事实上​​,它们根本不是重复提交。)它们包含分支合并到另一个分支的信息。当您尝试拥有线性历史( — 让我们面对它 — 是无法处理分支,尤其是以理智方式合并的系统的残余)时,您不可避免地会丢失有关源代码如何形成的信息现在。合并提交是项目历史的重要组成部分,允许您查看哪些提交在哪个时间点属于哪个分支。它允许您在编写每个分支后几年也可以关注它们。如果提交中有任何可疑之处,您可以使用该上下文信息来重新理解您这样做的原因。

    请不要试图在某些可视化工具中让它看起来不错,从而人为地阻碍您的存储库。尝试利用分支和合并的全部力量。

    (是的,我喜欢 Git。还有分支。还有合并。)

    【讨论】:

    • 我对包含合并发生信息的提交很好。但这不是它的工作方式——这些合并提交也包含变更集(至少当我在 Github 上查看它们时)。这绝对是错误的行为,因为它重复了信息并使用户不确定他应该在哪里评论给定的更改——在引入它的提交的差异中,还是在合并提交中?
    • 是的,它就是这样工作的。 Github 在欺骗你。试试git show -p <commit-id>,你会看到一个提交不包含任何更改;它只是一个带有两个父提交的提交。 (这至少对没有冲突的合并有效。我不太确定 Git 如何处理有冲突的合并。)
    猜你喜欢
    • 2013-01-13
    • 2010-12-23
    • 1970-01-01
    • 2018-07-17
    • 2013-01-15
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多