git PR合并提交(rebase方式)

news/2025/1/16 7:51:03/

一、参考资料

Gitee 工作流说明

二、常用指令

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

三、合并提交(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 -ugit rebase --continueif( git rebase --abort )break; 
    }
    
  4. merge工作流

    git pull
    编辑冲突文件
    git add .
    git commit -m "feat: this is a comment"
    git push
    

3.2 关键步骤

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

    git log
    
  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
    
  3. 解决冲突

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

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

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

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

    git push -f origin yourbranch
    
  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

更新本地分支

git fetch upstream
git checkout master
git rebase upstream/master

拉分支

git checkout -b myfeature

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

保持分支和master同步

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

# While on your myfeature branch
git fetch upstream
git rebase upstream/master

提交变更

git add .
git commit -m "提交原因"

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

push推送到远程

git push -f origin myfeature

3.4 回退分支

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

# create a branch
git checkout -b myrevert# sync the branch with upstream
git fetch upstream
git rebase upstream/master

如果还原的分支是:merge commit

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

如果还原的分支是:single commit

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

push推送到远程

git push ${your_remote_name} myrevert

3.5 处理提交冲突

如何处理代码冲突

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

git checkout master
git fetch upstream
git rebase upstream/master

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

git checkout yourbranch
git rebase master

用vi等工具查看冲突

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

git add .
git rebase --continue
git push -f origin yourbranch

四、FAQ

Q:删除文件失败

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

在这里插入图片描述

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
解决办法:
将git rebase产生的中间文件删除,重新rebase
rm -rf .git/rebase-mergegit rebase yourbranch

http://www.ppmy.cn/news/834218.html

相关文章

电脑安装不了pr提示不满足系统要求怎么办?

最近有小伙伴反映,自己的电脑一安装pr就出现不满足系统要求,换了各种版本都不行,遇到这种情况要怎么解决呢?我们一起来看看吧! 这种情况有可能是电脑配置太低,不满足PR安装的最低要求。 CPU型号较老&#x…

台式电脑网络连接配置异常_adobe pr软件编辑4k高清大码率视频的机器配置要求...

带hd610核显的处理器,pr编辑视频时可以流畅拉动进度条 最近一段时间,我遇到pr软件编辑4k视频的小麻烦,经过几次实验后终于基本理清了这里面的一些门道,对于即将或者已经遇到需要用pr软件编辑4k高清视频的朋友,应该有所…

c语言软件对电脑配置要求高吗,请问学软件工程需要高配置的电脑吗?

回答: 首先是处理器的选择上,按照Adobe的说法,PR是吃核心数的,而AE更依赖单核的性能,所以如果你主要用PR,那么多核心的处理器是必须的,而还有做AE特效的话,那么最好处理器的主频也要…

学c语言 pr用什么电脑配置,2020是pr要什么样的系统什么样的电脑配置?

满意答案 k买jhpld 2020.10.12 采纳率:41% 等级:8 已帮助:460人 接口、颗粒数量多少与储存大小(包括内存的接口,如:SDRAM133,DDR333,DDR2-533,DDR2-800,DDR3-1333、DDR3-1600、DD…

系统驱动作业

作业1 myled_time.c #include <linux/init.h> #include <linux/module.h> #include<linux/of.h> #include<linux/gpio.h> #include<linux/of_gpio.h> #include<linux/timer.h>struct device_node *dnode; unsigned int gpiono; struct t…

计讯物联网关型水利遥测终端机TY910确保闸站自动化监测长效运行

闸站是我国水利建设工程的重要组成部分&#xff0c;具备调度水源、防洪排涝、灌溉等能力&#xff0c;在农业、水路运输、养殖业等行业领域起着关键作用&#xff0c;进而解决区域水资源不均衡的问题&#xff0c;促进水资源多方面的利用。当前&#xff0c;我国闸站存在数量多、分…

cmd 文件名字有空格

运行EXE文件的话&#xff0c;输入文件的名字就可以了&#xff0c;当然如果文件不在当前目录或者PATH变量的目录里面&#xff0c;你需要先进入那个EXE文件的目录&#xff0c;或者输入文件名字的里面包含目录。此外&#xff0c;如果文件名字里面有空格等特殊符号&#xff0c;你需…

输入带空格的字符串

1.用scanf输入 char arr[100] { 0 }; scanf("%[^\n]", arr); 2.getline string arr; getline(cin,arr); 3.gets char arr[100]{0}; gets&#xff08;arr&#xff09;; 4.fgets() char a[100]; fgets(a,1000,stdin); 5.cin.getline() char a[100]; cin.getl…