You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何合并master分支旧提交?GitLab合并请求后能否回溯压缩提交?

如何回溯压缩GitLab仓库中已合并的未压缩提交?

没问题,这种GitLab的小bug确实挺烦人的,不过我们可以通过Git的交互式变基来回溯压缩那些没被合并成单个提交的历史记录。下面是具体的操作步骤,记得操作前先和团队沟通一下,因为修改公共分支(比如master)的历史会影响其他人的工作:

  • 第一步:拉取最新的master分支
    先确保你的本地仓库是最新状态:

    git checkout master
    git pull origin master
    
  • 第二步:启动交互式变基
    找到你要压缩的那批提交的前一个提交的哈希值(也就是这批提交中最早的那个提交的父提交)。你可以用git log --oneline查看简洁的提交历史,找到对应的哈希(比如abc123)。然后运行:

    git rebase -i abc123
    
  • 第三步:选择要压缩的提交
    运行命令后会弹出文本编辑器,里面列出了abc123之后的所有提交。把你想压缩的提交前面的pick改成squash(或缩写s),只保留第一个提交的pick(这个提交的信息会作为合并后的提交基础)。举个例子:

    pick abc123 这是要保留的基础提交标题
    squash def456 要压缩的第一个提交
    squash ghi789 要压缩的第二个提交
    

    保存并退出编辑器即可。

  • 第四步:修改合并后的提交信息
    接下来会弹出第二个编辑器,让你编辑合并后的最终提交信息。你可以把原来的多个提交信息整合成一个(比如用当初MR的标题),编辑完成后保存退出。

  • 第五步:强制推送到远程仓库
    因为我们修改了Git的历史记录,普通推送会被拒绝,所以需要用强制推送。这里推荐用--force-with-lease,它比直接--force更安全,能避免意外覆盖其他人的提交:

    git push origin master --force-with-lease
    

重要注意事项

  • 如果团队里有其他成员已经拉取了旧的master分支,他们需要重新基于新的master分支做变基:
    git checkout 他们的开发分支
    git rebase origin/master
    
    过程中如果遇到冲突,需要手动解决后继续变基。
  • 操作前确保本地没有未提交的修改,可以用git stash临时保存,操作完成后再恢复。
  • 如果这些未压缩的提交已经被其他分支合并,修改历史可能会带来更多冲突,建议先评估影响再操作。

内容的提问来源于stack exchange,提问作者bloub

火山引擎 最新活动