【菜狗前端work-git】反合master代码的坑及如何解决避免+提交代码注意事项+git常用命令总结

一、反合master代码的坑及如何解决避免

情景回顾

  1. 分支A:包含功能1、2。

  2. 分支B:包含功能3,且功能3基于功能1。

  3. 小Y的操作

    • 将分支A合进分支B。
    • 删除功能2,保留功能1和功能3。
    • 测试后,合并到master分支并上线。
  4. 小Q的操作

    • 分支A对应版本该上线了。
    • 反合master没有冲突以为没问题,但自测时发现功能2丢失。

问题分析

  • 小Y的操作:将分支A合进分支B并删除功能2,这会导致Git认为功能2已经被删除。
  • 小Q的操作:当小Q在分支A反合master时,Git会认为功能2已经被删除,因此不会重新引入功能2------导致功能2丢失。

解决探索

1、如果基于分支A新建分支A2,将A2中的功能1保留,功能2删除,然后将A2合并入分支B, 并上线合入master。那这个时候分支A再反合master,会保留功能2吗?

不会,这种做法仍然是错误的。

​编辑

解释
  • 合并操作:合并操作会将目标分支(在这里是master分支)的更改应用到当前分支(在这里是分支A)。如果目标分支中已经删除了某个功能,那么这个删除操作也会被应用到当前分支。
  • 比对机制:Git在合并时会比对两个分支的差异,然后将差异应用到目标分支。因此,如果master分支中已经删除了功能2,这些删除操作会被合并到分支A中。
  • 无论小Y是在分支A还是A2删除功能2,只要这些更改最终被合并到master分支,小Q反合master时都会丢失功能2 ------ ****即git底层比较与哪个分支删除无关,与代码差异有关。

2、小Y在开发过程中应该手动复制分支A里的功能1

总结: 永远基于线上代码开发 不要基于开发代码开发 就没问题------手动复制代码

同时,提交代码也应该原子性,尽量避免避免同一功能多次提交,减轻手动复制代码工作

二、提交代码注意事项

  1. 先git pull拉取最新代码
  2. 再git add .
  3. git commit -m "xxxx"
  4. git push
  5. 如果有冲突没有push成功,则解决冲突后重新执行2-4步------注意:修改/删除冲突代码的时候一定要问一下写这个代码的同事,确定是否能够这样修改/删除,避免误删/修改出错
  6. 成功提交并推送代码

三、git常用命令总结

  • 首次要配置user.name和user.email
  • git clone
  • git checkout 分支名 (失败的话通过这个git fetch获取最新分支,git branch -a 获取所有分支(带*的是本地分支),git checkout -b xxx 新建xxx分支)
  • git status (查看修改文件)
  • git pull(避免和别人代码冲突)
  • git add .
  • git commit -m ""
  • git push 或 git push <远程仓库名称> <本地分支名称>:<远程分支名称> ---将本地分支推送到不同远程分支(建本地分支时就已经基于某分支便不需要再写远程分支名,远程仓库:origin)
  • 反合mster代码(如果待上线过程中master有其他版本上线更新的话)
markdown 复制代码
1. 切换到你的工作分支
 git checkout feature-branch
2. 拉取最新的 master 分支代码
 git fetch origin (会从远程仓库 origin 获取所有分支的最新数据,但不会自动合并或修改当前工作目录中的文件)
3. 合并 master 分支到你的工作分支
 git merge origin/master
4. 解决冲突(如果有)
 git add <conflicted-file>
   完成合并
 git commit
5. 推送合并后的代码到远程仓库
 git push origin feature-branch
(通过以上步骤,你可以将 master 分支的最新代码合并到你的工作分支,并提交到远程仓库。)

相关推荐
wjs0401 小时前
Git常用的命令
java·git·gitlab
原野风霜3241 小时前
Git使用总结
git
青草地溪水旁2 小时前
Git Bash 中 Git 命令的实用主义指南
git·bash
至善迎风3 小时前
版本管理系统与平台(权威资料核对、深入解析、行业选型与国产平台补充)
git·gitee·gitlab·github·svm
高旭的旭4 小时前
Gitlab 配置自定义 clone 地址
svn·ssh·gitlab·code
一念一花一世界5 小时前
DevOps实战(3) - 使用Arbess+GitLab+Hadess实现Java项目自动化部署
gitlab·jenkins·tiklab·arbess·开源cicd工具
上单带刀不带妹7 小时前
Git rm 命令与系统 rm 命令的区别详解
git
我的收藏手册11 小时前
性能监控shell脚本编写
前端·git·github
Yvonne爱编码12 小时前
简述ajax、node.js、webpack、git
前端·git·ajax·webpack·node.js·visual studio
2501_920047031 天前
git在Linux中的使用
linux·git·elasticsearch