欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Git 多人单机集成与协作的常见场景

最编程 2024-05-03 21:35:06
...

甲、乙两个人共同维护同一个分支[feature],包含a~f等文件

一、不同人修改了不同文件的处理

  • 甲修改了a文件后提交到远程分支

  • 乙拉取远端分支,修改b文件,此时甲又更新了a文件并提交到远程,乙push会报错!!!

    • 乙正常操作如下,执行push后会报错:
    git fetch origin
    git checkout -b feature  // 创建并切换到feature分支
    // 修改 b 文件后提交
    git add .
    git commit -m 'Fix bug'
    git push origin
    
    • 解决办法:
    git fetch origin
    git merge origin/feature
    git push origin
    

建议push前先拉取远端的代码,若有改动,则合并后再push

二、不同人修改相同文件的不同区域的处理

  • 甲修改了文件c并push到远端

  • 乙也修改了文件c(不同位置),进行push报错

    • 解决办法:
    git fetch
    git merge origin/feature
    git push
    

三、不同人修改相同文件的同一区域的处理

  • 乙修改了文件d并push到远端

  • 甲也修改了文件d(同一位置),进行push报错

    • 解决办法:
    git pull // 将远程主机分支最新内容拉下来后与当前本地分支直接合并 fetch + merge
    
    // 因为修改同一文件的相同区域,合并时会有冲突,须手动解决,
    // 打开文件对相同区域的内容进行修改(修改为最终合适的内容:即甲乙都需要),然后再提交
    git commit -m 'Resolved Conflit d'
    git push origin
    

四、不同人同时变更了文件名和文件内容的处理

  • 甲修改了文件e的名称并push到远端

  • 乙修改了文件e中的内容,进行push报错

    • 解决办法:
    git pull 
    git push origin
    

解读git的文件存储:git存放blob文件时是以文件内容来区分的,并不以文件名来区分;此处的变更文件名操作和变更文件内容的操作能够自动被git处理,原因就在于blob文件并没有发生修改的冲突。而如果其中一个人既变更了文件名又修改了文件,同时另一个人也修改了该文件的同一位置的内容,就会被git识别为冲突,而不能自动进行处理了,需参考上种个情况进行处理。

五、不同人把同一文件改成了不同的文件名的处理(文件内容一致)

  • 甲修改了文件f的名称并push到远端

  • 乙也修改了文件f中的名称,进行push报错

    • 解决办法:
    git pull // 报错冲突
    
    // 两人协商解决冲突
    // 解决冲突后,乙重新生成commit,再push
    git commit -m 'Resolved Conflit f'
    git push origin
    

六、总结

  1. push前一定先pull
  2. 合并冲突,非自己的变动保持原样,和自己冲突的代码找相应的代码提交人确认如何解决冲突
  3. 合并完成后,保证本地能编译能运行再push
  4. 合并到主干的代码必须通过测试,必须通过代码review