Git 分支协作相关问题

80 阅读1分钟

最近项目中碰到的问题:

  • 问题1: git pull 默认行为导致经常需要解决冲突

两个人协作一个分支 XXX

  1. A 提交 commmit 到 XXX,
  2. B git pull XXX, (B 的 pull 的默认行为是 merge)
  3. A 提交 commmit 到 XXX (使用 git ps -f 了),
  4. B git pull XXX (此时产生冲突,解决后 git ps XXX)
  5. A rebase master 时产生冲突,需多次解决

**解决方案 **

  1. 更新 master 分支到本地 master 分支
  2. XXX 分支 merge master 分支
  3. git diff commitId~~(获取 master 最新 commitid)~~ Head (当前分支的 HEAD) > diff.patch (生成 diff 的 patch 文件)
  4. 从 Master 开出新分支 XXX_New
  5. 将 diff.patch 应用到 XXX_New
 git apply diff.patch
  1. 将新的 patch 修改 提交
git add .
git ci -m '修改信息'
git ps

后续解决

  1. B 需要将 pull 的默认行为设置成 rebase
git config --global --add pull.rebase true

查看相关配置

查看仓库级的config:`git config --local -l`

查看全局级的config:`git config --global -l`

查看系统级的config:`git config --system -l`
  1. 或者 B 在拉取 XXX 相关数据可如下操作
git fetch origin  XXX
git rebase -i XXX
  • 问题2 : XXX rebase master 分支后导致代码丢失
  • 场景复现:
  1. B 拉了 XXX 分支 代码
  2. A 提交了 XXX 分支 最新修改代码
  3. B 未拉取 A 最新代码,并rebase master 代码后 git ps -f (强制提交了)
  4. 发现 A 提交的代码丢失 后续解决
  5. 多人协作场景需先 git pull 后 再做 rebase 相关操作。