Git(武佩奇版)--实战4

267 阅读3分钟

rebase(变基)

  • 作用:使git的记录变得简洁

应用场景

第一种:多个记录整合成一个记录

  • 我们最开始的时候master的版本可能是C1,然后我们进行开发,每一天都有提交的记录,最后完成了工作可能有5次的提交记录,这个提交记录对我们自己有用,记录着每天的开发流程,但是老板只关注于C1到C2的变化,并不关心中间的提交过程,可以使用rebase进行变基,只保留C1到C2的提交记录,看起来直接从C1到C2
  • image.png
  • 注意:当我们想要合并的M1,M2,M3,C2中有的已经被提交到远程仓库了,就最好不要使用rebase进行提交记录的整合了,这样会使得远程和本地的提交记录不一致,容易出现问题

操作过程

git rebase -i HEAD~3
git rebase -i 最远的版本号
  • image.png

  • image.png

  • image.png

第二种:多个分支记录整合成一个分支记录

  • 开发中可能可能有多个分支,例如将master分出dev分支进行代码的开发,这样在我们提交记录的时候,我们的dev分支上的提交记录也会跟着记录到我们的提交结果中,我们不想让这些结果出现,我们可以使用rebase,让提交记录只出现在master分支上,这样看起来我们好像没有分过支一样
  • image.png

操作过程

git checkout dev
git rebase master
git checkout master
git merge dev
  • image.png
  • image.png
  • image.png
  • image.png
  • image.png
  • image.png
  • 额外收获
git log --graph
git log --graph --pretty=format:"%h %s"

第三种:公司代码和家庭代码各开发50%,直接pull会产生新的分支,使用rebase

  • 公司代码和家庭代码各开发50%,直接pull会产生新的分支,假设公司的代码提交远程了,但是家庭的代码只是提交到了本地,首先使用fetch命令将远程的dev上的代码拿下来,实际上是放在了本地的版本库中,然后使用rebase,将远程的代码变基到现有的本地代码中,这样不会产生分支
  • image.png
  • 命令
git checkout dev
git fetch origin dev
git rebase origin/dev

注意事项

  • 我们在使用rebase的过程中不可能一帆风顺,很多的情况下会产生冲突,下面是解决办法
    • 首先我们先解决冲突
    • 解决完冲突,add操作,不用commit,下面执行continue会自己进行提交版本
    • 因为之前是rebase的过程被打断了,要重新git rebase --continue
  • image.png
  • image.png

冲突

  • 软件beyond compare
    • 网址:www.scootersoftware.com/index.php
    • 安装过程(Beyond Compare的安装)
    • 使用
      • 首先是配置文件的更改,将mergetool的信息加入到.gitconfig的文件中,方便在git工具的命令行中进行调用
        • 编辑git配置文件 C:\Users\xxxxx.gitconfig并保存,然后就可以在git里来调用mergetool来通过Beyond Compare查看差异
        #使用beyond compare来查看文件差异
        [diff]
        #对比工具名称,必须与difftool项里的名称保持一致
        tool = bc4
        [difftool "bc4"]
        #beyond compare路径和调用命令
        #$REMOTE 表示commit之后的文件
        #LOCAL 表示commit到git的文件
        cmd = "\"C:/program files (x86)/beyond compare 4/bcomp.exe\" \"$REMOTE\" \"$LOCAL\""
        #合并分支
        [merge]
        #对比工具名称,必须与mergetool项里的名称保持一致
        tool = bc4
        [mergetool]
        prompt = false
        [mergetool "bc4"]
        #beyond compare路径和调用命令
        cmd = "\"C:/program files (x86)/beyond compare 4/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\""
        
  • image.png
  • image.png