代码之家  ›  专栏  ›  技术社区  ›  polygenelubricants

Git反复合并挤压

  •  31
  • polygenelubricants  · 技术社区  · 16 年前

    我试图在git中有两个包含二进制文件的分支——一个是“开发”分支,另一个则是“稳定”分支。在我想将这些文件“发布”到稳定分支之前,开发分支可以对这些文件进行多次更改(如果相关,稳定分支会重命名这些文件)。

              X-------------------G stable
             /                   /
        a---b---c---d---e---f---g development
    

    git merge --squash

              X-------------------G stable
             /                   
        a---b---c---d---e---f---g development

    a---b---X---G
    

    • 或者,是否有可能告诉git只合并特定“范围”的修订,就像在SVN中一样?
    • 或者,在拉取时,是否有可能在不从另一个分支下载所有引用的情况下进行正常的合并?
    • --squash 我总是试图将整个历史融合起来,直到共同的父母,只解决了我一半的问题。

                                  X stable
                                 /
        a---b---c---d---e---f---g development
    

    5 回复  |  直到 13 年前
        1
  •  24
  •   pvillela    15 年前

          X stable
         /                   
    a---b---c---d---e---f---g development
    

    您可以使用以下步骤将最后一次提交从开发分支复制到稳定分支:

    git checkout development@{0}  # get working tree from "development", detach HEAD
    git reset --soft stable  # reposition detached HEAD on "stable"
    git commit  # enter the appropriate commit message
    git branch temp  # create a temporary branch "temp" at HEAD
    git checkout temp  # get on the new temporary branch
    git branch -M stable  # rename "temp" to "stable"
    

          X-------------------G stable
         /                   
    a---b---c---d---e---f---g development
    

          X-------------------G stable
         /                   
    a---b---c---d---e---f---g---h---i---j development
    

          X-------------------G-----------J stable
         /                   
    a---b---c---d---e---f---g---h---i---j development
    
        2
  •  7
  •   Paul T. Rawkeen Bartosz Zasada    8 年前

    merge --squash git-rebase --interactive

    如果我理解正确的话,没有。 .

    是否有可能告诉git只合并特定“范围”的修订,就像在SVN中一样?

    git merge [commit hash]

    或者,我应该为有问题的文件提供一个自定义合并驱动程序,简单地将“他们的”版本重命名为“我们的”,从而解决冲突吗?我仍然担心,壁球总是试图融合整个历史,直到共同的父母,只解决了我一半的问题。

    不! git merge --squash

        3
  •  4
  •   knittl    8 年前

    git rebase -i m meld (更新:对于较新的Git版本,请键入 s squash )

    git branch small-dirty-changes-i-don’t-want-anybody-to-see

    # on branch "hacking": hack commit hack commit hack commit
    
    # create a reference to your history
    $ git branch dirty-history
    
    # sqash your commits by setting all lines to "meld"
    $ git rebase -i
    
    # checkout master or the branch you want to merge to
    $ git checkout master
    
    # merge your squashed commit
    $ git merge hacking
    # or: $ git pull hacking
    
        4
  •  1
  •   Community Mohan Dere    9 年前

    top voted answer 有效地区分稳定和开发分支,并将稳定中缺少的所有更改作为一次提交应用。有另一种方法可以做到这一点:

    $ git checkout stable 
    $ git diff stable development | git apply --index -   
    $ git commit
    

    $ git reset --hard
    

    您可以重复该过程任意次数,因为每次需要合并时,您实际上只是在比较两个分支的尖端。

    除了来自开发分支的提交外,稳定分支中没有其他提交

    如果您对此感到担忧,每次在稳定版上提交时,您都可以将合并的开发提交哈希范围放入提交消息中。这样,如果你需要回溯,你就有了一些记录。

        5
  •  -1
  •   Glenn Moss    15 年前

    $ git merge --squash development
    $ git branch -d development
    $ git checkout -b development
    # continue work on development branch
    

    git branch -f development 可能会执行与删除和重新创建分支相同的操作。

    正如我所说的,我对git很陌生,所以我很想得到一些关于这个想法的反馈。