• git PR合并提交(rebase方式)


    一、参考资料

    Gitee 工作流说明

    二、常用指令

    # 继续添加提交
    # 您可能会在前次提交的基础上,继续编辑构建并测试更多内容,可以使用 `commit --amend` 继续添加提交。
    git commit --amend
    
    git push -f
    
    • 1
    • 2
    • 3
    • 4
    • 5

    三、合并提交(rebase方式)

    rebase详解——非常精髓

    git merge和git rebase的区别, 切记:永远用rebase

    Git使用Merge和Rebase区别及心得技巧

    如果您提交了一个PR以后,根据检视意见完成修改并再次提交了PR,您不想让审阅者看到多次提交的PR,因为这不便于继续在检视中修改,那么您可以合并提交的PR。合并提交的PR是通过压缩Commit来实现的

    rebase通常是发生在自己的个人branch上

    3.1 rebase 和 merge的区别

    1. rebase 的冲突是一个一个解决,如果有10个冲突,先解决第1个,然后才会出现第2个冲突,直到所有冲突解决完。

    2. merge 是所有的冲突都会显示出来

    3. rebase工作流

      冲突全部解决,rebase成功

      git rebase 
      while(存在冲突) {
          git status
          找到当前冲突文件,编辑解决冲突
          git add -u
          git rebase --continue
          if( git rebase --abort )
              break; 
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    4. merge工作流

      git pull
      编辑冲突文件
      git add .
      git commit -m "feat: this is a comment"
      git push
      
      • 1
      • 2
      • 3
      • 4
      • 5

    3.2 关键步骤

    1. 先在本地分支上查看日志

      git log
      
      • 1
    2. 把顶部的n个提交记录聚合到一起进入,注意n是一个数字。

      把需要压缩的日志前面的pick都改成s,s是squash的缩写。注意必须保留一个pick,如果将所有的pick都改成了s就没有合并的目标了,会发生错误。修改完成以后,按ESC键,再输入:wq,会跳出一个界面,问你是否进入编辑提交备注的页面,输入e以后,进入合并提交备注的页面。请把需要合并的备注都删掉,只保留合并目标的备注,再按ESC键,输入:wq保存退出即可。

      # 如果存在该文件,删除rebase-merge
      rm -fr ".git/rebase-merge"
      
      git rebase -i HEAD~n
      
      # 修改合并的配置
      git rebase --edit-todo
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    3. 解决冲突

      # 1. 查看冲突
      git status
      
      # 2. 手动解决冲突
      
      # 3. 继续add
      git add -u
      
      # 4. 继续合并提交
      git rebase --continue
      
      # 5. 重复1-4步骤,直到所有冲突都解决了
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

      如果rebase过程中,你想中途退出,恢复rebase前的代码则可以用指令:

      git rebase --abort
      
      • 1
    4. pull远程分支

      git pull origin yourbranch
      
      • 1
    5. push推送远程仓库。

      git push -f origin yourbranch
      
      • 1
    6. 回到gitee上的PR提交页面查看,您就可以看到之前的提交已经合并了。

    3.3 fork分支

    clone远程仓库到本地

    # 把远程 fork 仓库复制到本地
    git clone https://gitee.com/$user_name/$repository_name
    
    # 设置本地工作目录的 upstream 源(被 fork 的上游仓库)
    git remote add upstream https://gitee.com/openeuler/$repository_name
    
    # 设置同步方式,此处
    git remote set-url --push upstream no_push
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    更新本地分支

    git fetch upstream
    git checkout master
    git rebase upstream/master
    
    • 1
    • 2
    • 3

    拉分支

    git checkout -b myfeature
    
    • 1

    然后在 myfeature 分支上编辑和修改代码。

    保持分支和master同步

    执行merge的时候,请不要使用 git pull,因为这种方式会使提交历史变得混乱,并使代码更难被理解。

    # While on your myfeature branch
    git fetch upstream
    git rebase upstream/master
    
    • 1
    • 2
    • 3

    提交变更

    git add .
    git commit -m "提交原因"
    
    • 1
    • 2

    您可能会在前次提交的基础上,继续编辑构建并测试更多内容,可以使用 commit --amend 继续添加提交。

    push推送到远程

    git push -f origin myfeature
    
    • 1

    3.4 回退分支

    创建一个分支并用upstream进行同步

    # create a branch
    git checkout -b myrevert
    
    # sync the branch with upstream
    git fetch upstream
    git rebase upstream/master
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    如果还原的分支是:merge commit

    # SHA is the hash of the merge commit you wish to revert
    git revert -m 1 SHA
    
    • 1
    • 2

    如果还原的分支是:single commit

    # SHA is the hash of the single commit you wish to revert
    git revert SHA
    
    • 1
    • 2

    push推送到远程

    git push ${your_remote_name} myrevert
    
    • 1

    3.5 处理提交冲突

    如何处理代码冲突

    先将分支切换到master上,并完成master的rebase

    git checkout master
    git fetch upstream
    git rebase upstream/master
    
    • 1
    • 2
    • 3

    将分支切换到您使用的分支上,并开始rebase

    git checkout yourbranch
    git rebase master
    
    • 1
    • 2

    用vi等工具查看冲突

    解决冲突以后,再把修改提交上去

    git add .
    git rebase --continue
    git push -f origin yourbranch
    
    • 1
    • 2
    • 3

    四、FAQ

    Q:删除文件失败

    $ rm -rf ./.git/rebase-merge
    rm: cannot remove './.git/rebase-merge': Device or resource busy
    
    • 1
    • 2
    错误原因:
    未知
    
    解决办法:
    用腾讯电脑管家【文件粉碎】功能,彻底删除该文件
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    Q:缺少.git/rebase-merge/head-name导致rebase失败

    执行git rebase过程中断后报No such file or directory错误的解决方法

    $ git rebase --continue
    warning: could not read '.git/rebase-merge/head-name': No such file or directory
    
    • 1
    • 2
    解决办法:
    将git rebase产生的中间文件删除,重新rebase
    rm -rf .git/rebase-merge
    
    git rebase yourbranch
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    Spring Boot 6.1 ( Wobsoeckt的简单匹配)
    [R]第一节 初始R语言
    辣椒碱人血清白蛋白纳米粒Capsaicin-HRP-HSA|辣椒素卵清白蛋白纳米粒Vanillylnonanamide-OVA|齐岳
    MySQL中Binlog日志的使用
    VHDL硬件描述语言(三)VHDL语言要素
    2022-11-06
    低压配电室电力安全解决方案
    IIC驱动OLED
    CIRIUM(睿思誉)逐渐成为航空公司二氧化碳排放报告的标准
    SpringBoot 注解 ==
  • 原文地址:https://blog.csdn.net/m0_37605642/article/details/126805865