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

react native 项目 merge 的时候,为什么组件的.json 文件没有覆盖修改?很费解

  •  
  •   magic3584 · 8 天前 · 546 次点击

    一个 RN 项目,今天在合并分支的时候,发现组件的 .json 文件没有被覆盖修改,大佬们帮忙看下

    目录格式如下:

    project
    │   
    └───js  
       │   
       └───Components
            │
            └───组件 A
                     │   package.json
       
    

    其中,AB 两个分支里  package.json 文件内容如下

    {
      "name": "name",
      "upload": {
        "add": "npm publish --registry=http:A",
      }
    }
    
    {
      "name": "name",
      "upload": {
        "add": "npm publish --registry=http:B",
      }
    }
    

    当我 merge A into B 的时候,这个 package.json 里内容仍然是 http:B,这里为什么不是 http:A 呢?

    请大佬解惑

    第 1 条附言  ·  8 天前
    相关分支大概如下

    结果还是 http:B ???
    / |
    / |
    / |
    merge into B |
    / |
    / |
    http:A http:B
    | ----------------/ |
    | / |
    | / |
    |------Temp |
    | (拉分支改成了 http:B) |
    |---------------------B1-------B
    |
    A
    第 2 条附言  ·  8 天前

    分支大概如下图:

    img

    12 条回复    2022-08-06 18:26:15 +08:00
    simonCN
        1
    simonCN  
       8 天前
    你看下 git merge 的那个 commit 具体改变的数据,或者这个 json 文件被 ignore 了?
    mxT52CRuqR6o5
        2
    mxT52CRuqR6o5  
       8 天前
    这个要看先后的
    magic3584
        3
    magic3584  
    OP
       8 天前
    @simonCN #1
    commit 里没有这个 json 文件的修改
    . gitignore 内容如下
    ``` json
    # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

    # dependencies
    /node_modules
    */node_modules/
    */dist/
    /.pnp
    .pnp.js

    # testing
    /coverage

    # production
    /build

    # misc
    .DS_Store
    .env.local
    .env.development.local
    .env.test.local
    .env.production.local

    npm-debug.log*
    yarn-debug.log*
    yarn-error.log*
    .idea/
    ```
    magic3584
        4
    magic3584  
    OP
       8 天前
    @mxT52CRuqR6o5 @2
    大佬,分支大概图示已经 append 了
    mxT52CRuqR6o5
        5
    mxT52CRuqR6o5  
       8 天前
    @magic3584
    我感觉是不是 merge B into A 得到结果 package.json 内容 http:B 就符合你预期?
    不管是 merge B into A 还是 merge A into B 最终得到的代码结果都是一样的,区别只是在于这条 merge 的 commit 是在 A 上还是在 B 上
    magic3584
        6
    magic3584  
    OP
       7 天前
    @mxT52CRuqR6o5 #5

    「不管是 merge B into A 还是 merge A into B 最终得到的代码结果都是一样的」

    为啥会一样呢?不是应该代码覆盖吗?
    mxT52CRuqR6o5
        7
    mxT52CRuqR6o5  
       7 天前 via Android
    @magic3584 你假定一个最简单的场景脑内预想一下或者实践一下,现在仓库里有两个文件文件 A 和文件 B ,在 A 分支修改文件 A ,在 B 分支修改文件 B ,然后想想 A merge 到 B 会是什么结果,B merge 到 A 是什么结果
    我表达水平不太行,不知道应该怎么讲明白这件事
    magic3584
        8
    magic3584  
    OP
       7 天前
    @mxT52CRuqR6o5 #7
    您说的是俩文件,所以 merge 后也应该是俩文件。
    我这里是同一个文件的相同位置,所以不说覆盖,应该也会有冲突的吧
    mxT52CRuqR6o5
        9
    mxT52CRuqR6o5  
       7 天前 via Android
    @magic3584 仔细想想我给的例子,我给的例子重点在于 AB 两个文件在 merge 前在两个分支上的状态是不一样的,在 A 分支上 A 文件是修改后的状态,在 B 分支上 A 文件是修改前的状态,难道我把 B merge 到 A 会把会让 A 文件变成修改前的状态吗?
    magic3584
        10
    magic3584  
    OP
       7 天前
    @mxT52CRuqR6o5 #7
    我查了下资料,我这里是因为 B 是 A 的子分支,所以 merge A into B 的时候,还是按 B 的为准,而如果 merge B into A 的时候,是会代码更改
    magic3584
        11
    magic3584  
    OP
       7 天前
    @mxT52CRuqR6o5 #9
    所以 merge 的时候是以最近修改为准上吧?而不是我上面说的主次分支吗?因为我这个情况按时间和主次分支都能说的通。然后我尝试 marge B into A 的时候,确实会把 B 的代码覆盖到 A 上
    mxT52CRuqR6o5
        12
    mxT52CRuqR6o5  
       7 天前
    @magic3584
    我这边的结论就是 5#的话
    不管是 merge B into A 还是 merge A into B (只要没有需要手动处理的冲突)最终得到的代码结果都是一样的,区别只是在于这条 merge 的 commit 是在 A 上还是在 B 上
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1044 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:07 · PVG 06:07 · LAX 15:07 · JFK 18:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.