一、参考资料

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

git PR合并提交(rebase方式)相关推荐

  1. git pr/mr 提交规范

    说在前面 我们希望每个 mr 尽量⽐较单⼀,不要涉及太多复合的内容.这样便于 review,必要时也便于回滚. 这⾥定义了 mr 提交时,title 和 message 的⼀个规范,如果可以的话,最好 ...

  2. git 代码没了,git rebase 合并提交记录,git stash

    xx 问题 git合并提交记录 创建提交记录 合并提交记录 rebase有冲突 合并后的本地路径提交到远程 其中的参数 pick 改变提交 5.txt 和 4.txt 的顺序 删除某一个提交 rewo ...

  3. [Git Rebase] Git Rebase 合并提交(命令操作 SourceTree 操作)

    前言 在开发过程中, 我们有的时候会有代码提交失误的情况. 在前一章, 我们介绍了git push - - force命令. 本章我们介绍git rebase命令及 SourceTree内的相关操作. ...

  4. Git工作流程和rebase与合并问题

    我和其他开发人员一起在一个项目上使用Git几个月了. 我有几年的SVN经验,所以我想我给这段关系带来了很多包袱. 我听说Git非常适合分支和合并,到目前为止,我只是没有看到它. 当然,分支很简单,但是 ...

  5. 改进合作 Git 工作流:自动提取、合并提交

    每天,美团的上百名工程师都在不断改进美团的用户体验,或是加入各种新鲜的功能.作为负责展现.交互的前端工程师,我们上线的次数可达一天数十次. 我们使用 Stash 托管项目代码.每个功能都新增一个新任务 ...

  6. git只提交一张图片_Git 图形化操作之合并提交记录

    Git 图形化操作之合并提交记录 Git 图形化操作之合并提交记录 目录1.显示日志2.合并提交记录3.推送合并的提交 独立观察员 2020 年 9 月 24 日 前言:当我们使用 Git 时,有时会 ...

  7. Git 图形化操作之合并提交记录

    Git 图形化操作之合并提交记录 独立观察员 2020 年 9 月 24 日 目录 1.显示日志 2.合并提交记录 3.推送合并的提交 前言:当我们使用 Git 时,有时会遇到刚提交推送完一次修改,发 ...

  8. git 申请合并冲突:rebase 解决合成一条再合并

    问题描述 申请合并时出现:Merge blocked: the source branch must be rebased onto the target branch. 要求 source bran ...

  9. git 合并提交 error: cannot ‘squash‘ without a previous commit

    我想合并将3/3 3/2 2/26 2/26的四次提交合并为一次 如何进行呢 1.执行git log 查看历史提交 找到想要合并的所有提交之前的那一次commit id 注意这里的历史记录越往下越旧 ...

  10. 如何在Git中合并特定的提交

    我已经从GitHub的存储库中分支了一个分支,并提交了一些特定于我的东西. 现在我发现原始存储库具有HEAD的良好功能. 我只想合并它而无需先前的提交. 我该怎么办? 我知道如何合并所有提交: git ...

最新文章

  1. 吴志强院士:CIM与城市未来
  2. axios使用post请求的时候后台接收不到参数
  3. Android 通过onTouchEvent判断是否为双击事件
  4. 搭建iscsi存储系统
  5. java 容器_JAVA的容器
  6. 【高德地图开发2】---配置工程
  7. RT5350原厂SDK及AP移植步骤详解
  8. linux vim命令及使用,极大提升使用linux的舒适程度
  9. java 泛型参数_[基础]-Java泛型
  10. a.hashCode() 有什么用?与 a.equals(b)有什么关系?
  11. Alamofire源码解读系列(七)之网络监控(NetworkReachabilityManager)
  12. MVC5 + EF6 + Bootstrap3 (11) 排序、搜索、分页
  13. CDN的基本原理和基础架构
  14. caffee2安装 踩坑记录
  15. python ppt自动生成_实战 | Python自动生成PPT调研报告
  16. windows任务栏黑屏不响应?
  17. ae在哪里直接复制合成_如何在AE里复制一个层
  18. PID控制器的优缺点和周期
  19. 面向对象编写一个计算器
  20. MYSQL数据库的实验总结_MySQL数据库基础总结

热门文章

  1. 从零开始制作点餐Android app(一)
  2. recover-quack-data-structure
  3. D3D9学习笔记之顶点缓存与索引缓存
  4. 解决Requirement already satisfied:问题
  5. Accelerated Proximal Gradient Method/FISTA
  6. 宣布造车后股价上演“过山车”,开心汽车如意算盘恐落空
  7. c语言中的inv是什么缩写,INV(inv是什么的缩写)
  8. linux怎么进sda12,VMare12.0.1安装Ubuntu16.04.2遇到[sda] Assuming drive cache
  9. 图像处理之相似图片识别(直方图应用篇)
  10. Linux云计算好学吗?Linux云计算运维学习资料 Vim编辑器