代码之家  ›  专栏  ›  技术社区  ›  Mobile Ben

挤压一系列git提交的非交互式方式

  •  0
  • Mobile Ben  · 技术社区  · 6 年前

    我目前正在从事一个iOS项目。我有一个在构建时运行的脚本。该脚本更新构建编号,将其提交到git中,并将其推送。然而,使用几天后,我意识到了一个副作用。我可以连续提交,其中它会增加内部版本号。因此,我的提交日志中充斥着这些提交。由于该项目被分解为几个核心库,这一问题变得尤为严重。因此,使用libs必然会导致构建增量(因为它是同一个工作区)。

    我现在意识到的是,我需要一个足够聪明的脚本来挤压连续的提交,即内部版本号的更新。

    跑步

    git log -20 --pretty=format:"%h - %s"

    例如,将产生

    6add12a1 - Update the package from handle
    70f438be - Updated client version to 0.15.0.2152 and next version to 0.15.0.2153
    7d84151f - Updated client version to 0.15.0.2151 and next version to 0.15.0.2152
    eace113b - Updated client version to 0.15.0.2150 and next version to 0.15.0.2151
    e72624dd - Updated client version to 0.15.0.2149 and next version to 0.15.0.2150
    85d15b6c - Updated client version to 0.15.0.2148 and next version to 0.15.0.2149
    a4e140cd - Updated client version to 0.15.0.2147 and next version to 0.15.0.2148
    ffb18892 - Updated client version to 0.15.0.2146 and next version to 0.15.0.2147
    ebd33432 - Updated client version to 0.15.0.2145 and next version to 0.15.0.2146
    f0727ca7 - Updated client version to 0.15.0.2144 and next version to 0.15.0.2145
    80ab2939 - Adjust balance if FB rewards popup is shown
    0c04a1d7 - Updated client version to 0.15.0.2143 and next version to 0.15.0.2144
    e89fd769 - Updated client version to 0.15.0.2142 and next version to 0.15.0.2143
    c404f9ce - Updated client version to 0.15.0.2141 and next version to 0.15.0.2142
    3911fb31 - Updated client version to 0.15.0.2140 and next version to 0.15.0.2141
    ee3b7056 - Updated client version to 0.15.0.2139 and next version to 0.15.0.2140
    cfb3b2a7 - Updated client version to 0.15.0.2138 and next version to 0.15.0.2139
    a11fa3d9 - Add conditionals compilation to remove some logging
    b9d0f75a - Disable backlight
    ba4447ae - Updated client version to 0.15.0.2137 and next version to 0.15.0.2138
    

    因此,在本例中,我希望将70f438be压缩为f0727ca7,然后将提交更新为类似“将客户端版本从0.15.0.2138更新为0.15.0.2152”。

    有两件事需要做。

    • 编写脚本或手动挤压连续的内部版本号增量提交
    • 更新我的脚本以检查以前的提交是否是/是内部版本号增量,如果是,请挤压。

    我自己写剧本没有问题。相反,这个问题的焦点是git命令本身。有关脚本的详细信息作为上下文提供。

    我要寻找的是如何以非交互方式使用git来挤压不从头部开始的特定连续提交范围。到目前为止,我所看到的参考文献都是从头部挤压出来的。

    比如这个。

    Is there a way to squash a number of commits non-interactively?

    今天晚些时候,我将进一步讨论这个问题,因为它可能仍然能给出答案。

    哦,是的,澄清一下,这些承诺都已经推出来了。

    请注意,这是在Mac上进行的。后一个脚本是从Xcode(构建阶段)运行的,是一个使用GitPython的Python脚本。

    0 回复  |  直到 6 年前
        1
  •  2
  •   Mobile Ben    6 年前

    好的,我做了一些实验并运行了一段时间,我想出了一个解决方案。

    如果那些具有更好git-fu的人能够验证这确实是一种好的/安全的方法,这将是很有帮助的。

    我放弃了更改提交消息以反映更改的尝试。我确实找到了这样做的方法,但现在我对这一切对存储库的影响有了更好的理解,所以我选择不担心这个细节。

    这个命令似乎适用于压缩一系列不是从头部开始的提交。

    git rebase -Xtheirs --onto 80ab2939 7d84151f

    这里的关键是 -Xtheirs 因为至少在我的应用程序中,它会导致冲突。请注意,我的案例很特殊,因为它依赖于已知的提交消息模式,并且文件是相同的。

    我在这段历史上运行了以上内容

    6add12a1 - Update the package from handle
    70f438be - Updated client version to 0.15.0.2152 and next version to 0.15.0.2153
    7d84151f - Updated client version to 0.15.0.2151 and next version to 0.15.0.2152
    eace113b - Updated client version to 0.15.0.2150 and next version to 0.15.0.2151
    e72624dd - Updated client version to 0.15.0.2149 and next version to 0.15.0.2150
    85d15b6c - Updated client version to 0.15.0.2148 and next version to 0.15.0.2149
    a4e140cd - Updated client version to 0.15.0.2147 and next version to 0.15.0.2148
    ffb18892 - Updated client version to 0.15.0.2146 and next version to 0.15.0.2147
    ebd33432 - Updated client version to 0.15.0.2145 and next version to 0.15.0.2146
    f0727ca7 - Updated client version to 0.15.0.2144 and next version to 0.15.0.2145
    80ab2939 - Adjust balance if FB rewards popup is shown
    0c04a1d7 - Updated client version to 0.15.0.2143 and next version to 0.15.0.2144
    

    这会产生一些输出:

    First, rewinding head to replay your work on top of it...
    Auto-merging resources/plists/jks-info.plist
    Auto-merging resources/next_build_version.txt
    [detached HEAD 8beac4c7] Updated client version to 0.15.0.2152 and next version to 0.15.0.2153
     Date: Mon Mar 4 02:01:15 2019 -0800
     2 files changed, 2 insertions(+), 2 deletions(-)
    Committed: 0001 Updated client version to 0.15.0.2152 and next version to 0.15.0.2153
    [detached HEAD 4ede3d58] Update the package from handle
     Date: Mon Mar 4 02:03:09 2019 -0800
     1 file changed, 4 insertions(+), 2 deletions(-)
    Committed: 0002 Update the package from handle
    All done
    

    但由此产生的历史( git log )很好。

    4ede3d58 - Update the package from handle
    8beac4c7 - Updated client version to 0.15.0.2152 and next version to 0.15.0.2153
    80ab2939 - Adjust balance if FB rewards popup is shown
    0c04a1d7 - Updated client version to 0.15.0.2143 and next version to 0.15.0.2144
    e89fd769 - Updated client version to 0.15.0.2142 and next version to 0.15.0.2143
    

    我的最后一步是强制推送,因为已经推送了提交。请注意,强制推送将重写您的历史记录。我实际上使用 git push --force-with-lease 为了安全起见。