V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
itskingname
V2EX  ›  git

分支 merge 了很多次,怎么从里面挑选出我自己的 commit?

  •  
  •   itskingname · 2022-09-13 20:51:18 +08:00 · 1918 次点击
    这是一个创建于 800 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们有 10 个人进行开发。所有人都基于同一个基础分支 master 拉出各自的分支,开发自己的功能,然后合并到 dev 分支。

    dev 是一个测试分支,QA 测试的时候会基于它进行测试。我由于是项目对接人,有时候会 QA 报了简单的错误,我就直接在 dev 上面修改。

    线上分支是 online 。上面有很多人的 hotfix (包括我们这 10 个人)。我每过一段时间,会把 online 分支的代码 merge 进 dev 。

    这样进行了 2 个月以后,dev 分支已经很乱了。

    我想把所有我直接在 dev 分支上面的修改单独找出来。应该怎么操作呢?不能直接看 commit log ,因为里面 merge online 分支以后,也有我的提交。但我只需要直接在 dev 分支直接修改的提交。

    13 条回复    2022-09-15 10:27:00 +08:00
    rekulas
        1
    rekulas  
       2022-09-13 21:05:09 +08:00
    你们提交 commit 连 author 不指定么?另外任何时候都应该避免直接修改 git 仓库

    如果其他人都是 merge 进去的话可以考虑把 log 拉出来,merge 的点和 merge 关联的 commit 都排除,剩下的就是你的
    itskingname
        2
    itskingname  
    OP
       2022-09-13 21:19:28 +08:00
    @rekulas 因为合并 online 的时候,也有我的代码。
    jfcherng
        3
    jfcherng  
       2022-09-13 23:04:55 +08:00
    或許 git log --first-parent --no-merges [email protected]
    FranzKafka95
        4
    FranzKafka95  
       2022-09-14 06:52:59 +08:00 via Android
    git 有命令可以筛选特定 commiter 的提交
    Dganzh
        5
    Dganzh  
       2022-09-14 09:23:34 +08:00
    先用 git log --author=xxx 查看自己的 commit hash, 然后 git cherry-pick hash1 hash2...
    nothingistrue
        7
    nothingistrue  
       2022-09-14 09:37:23 +08:00
    master 出的分支、dev 分支自身的修改、online 分支这几个来源,对于 dev 分支都是一样的合并来源(直接修改相当于合并本地 dve 分支到远程 dev 分支),所以你就别要想单纯靠 git 来区分这些来源了。

    其实按照你们这种开发过程,dev 分支 跟 master 分支当中必有一个是没用的分支。
    penll
        8
    penll  
       2022-09-14 09:53:35 +08:00   ❤️ 1
    用 sourcetree 那个提交线路图非常易懂,容易看到自己的提交和合并路径
    itskingname
        9
    itskingname  
    OP
       2022-09-14 11:14:20 +08:00
    @jfcherng 这个方法好,感谢、
    itskingname
        10
    itskingname  
    OP
       2022-09-14 11:15:08 +08:00
    @Dganzh 有个问题。就是里面有些提交,是基于别人最新 merge 的代码进行修改的。如果单纯 pick 出我自己的 commit ,有几个修改就会缺东西。
    lihengyu
        11
    lihengyu  
       2022-09-14 11:52:07 +08:00
    compare 一下 dev 和 online 分支,能够找出只存在于 dev 但不存在于 online 的提交,然后再在这些提交里找到你自己的提交。
    Hug125
        12
    Hug125  
       2022-09-14 19:57:18 +08:00 via iPhone
    建议 OP 之后定期重置 dev 分支,基于 online 分支重新拉一个 dev 出来,再把开发中的分支合并一遍,这样 git 树比较清晰整洁。
    itskingname
        13
    itskingname  
    OP
       2022-09-15 10:27:00 +08:00
    @lihengyu 问题是 我在 dev 上面的一些提交,是基于 merge online 后的代码进行修改的。如果只把 dev 有的提交拉出来,pick 的时候会出问题吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2737 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:14 · PVG 23:14 · LAX 07:14 · JFK 10:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.