Git之变基方式Rebase的使用

这篇具有很好参考价值的文章主要介绍了Git之变基方式Rebase的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Rebase 产生意义

  • 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。对应 merge 操作来说,想必我们都已经使用过很多次了,而 rebase 又是用在哪里呢?已经其正确的使用方式,到底是什么呢?
  • 使用 Git 进行产品开发的代码管理,势必是会存在多人在同一个分支上协同工作的问题,这样就很容易出现冲突。而遇到冲突的时候,一般情况都是已经有人在该分支上面提交代码了,我们不得不先将其他的提交 pull 到本地,然后在本地合并(如果有冲突的话),最后才能 push 成功。
$ git push origin master
To github.com:xxx/xxx.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:xxx/xxx.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
  • 但是我们会发现提交记录会变得有点乱,强迫症的你可能需要一条干净的直线,因为太多无用的 commit 很让人不舒服,而且不利于每天下午的 code review 代码检视,同时也会污染分支提交记录。
  • 如果使用 rebase 操作的话,可以把本地未 push 的分叉提交历史整理成直线,rebase 的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
$ git log --graph --pretty=oneline --abbrev-commit
*   e0ea545 (HEAD -> master) Merge branch 'master' of github.com:xxx/xxx
|\
| * f005ed4 (origin/master) add email info
* | 582d922 add author info
* | 8875536 add comment info
|/
* d1be385 init hello repo
......

二、Rebase 合并纪录

  • rebase 会使原本分叉的提交立马变成一条直线,这种神奇的操作,其实原理非常简单。注意观察,Git 把我们本地的提交“挪动”了位置,放到了 f005ed4 之后,这样整个提交历史就成了一条直线。rebase 操作前后,最终的提交内容是一致的,但是,本地的 commit 修改内容已经变化,它们的修改不再基于 d1be385,而是基于 f005ed4,但最后的提交 7e61ed4 内容是一致的。
$ git rebase
First, rewinding head to replay your work on top of it...
Applying: add comment
Using index info to reconstruct a base tree...
M    hello.py
Falling back to patching base and 3-way merge...
Auto-merging hello.py
Applying: add author
Using index info to reconstruct a base tree...
M    hello.py
Falling back to patching base and 3-way merge...
Auto-merging hello.py
# 再用 git log 看看发现变成直线
$ git log --graph --pretty=oneline --abbrev-commit
* 7e61ed4 (HEAD -> master) add author info
* 3611cfe add comment info
* f005ed4 (origin/master) add email info
* d1be385 init hello repo
......
  • 当然,也可以指定对最近的多少次的提交纪录进行合并。需要注意的是,不要合并已经提交到仓库的提交,不然会有问题。
选项列表 对应含义解释
p, pick use commit
r, reword use commit, but edit the commit message
e, edit use commit, but stop for amending
s, squash use commit, but meld into previous commit
f, fixup like “squash”, but discard this commit’s log message
x, exec run command (the rest of the line) using shell
d, drop remove commit
# 合并最近的3次提交纪录
# 之后就会自动进入vi编辑模式
$ git rebase -i HEAD~3
s 7e61ed4 add author info
s 3611cfe add comment info
s f005ed4 add email info

# 最好编辑退出即可
# 如果你异常退出了vi窗口,不要紧张,执行下面操作即可
$ git rebase --edit-todo
$ git rebase --continue

三、Rebase 分支合并

  • 假设我们团队一直在 master 分支上面开发,但是因为新功能所以切了一个 dev 分支出来。这时,同事完成了自己开发的部分 hotfix 并将其合入了 master 分支,此时我的分支已经落后于 master 分支。
  • 恰巧,这时需要同步 master 分支上面的改动,进行测试,那么就需要 merge 代码到自己的分支上。此时,我们会发现本地有一些 merge 信息。可能你会认为这样会污染我们自己的原本干净的提交记录,想要保持一份干净的提交记录,此时,就使用 rebase。
  • 使用 git rebase 命令,先回退到同事 hotfix,后合并 master 分支:
    • 首先,git 会把 dev 分支里面的每个 commit 取消掉;
    • 其次,把上面的操作临时保存成 patch 文件,存在 .git/rebase 目录下;
    • 然后,把dev 分支更新到最新的 master 分支;
    • 最后,把上面保存的 patch 文件应用到 dev 分支上;
  • 从 commit 记录上可以看出来,dev 分支是基于 hotfix 合并后的 master,自然而然的成为了最领先的分支,而且没有 merge 的 commit 记录。
# 我们自己在dev分支上面
$ git rebase master

四、Rebase 使用建议

  • 使用 rebase 当中需要注意的地方:
    • 最好是该分支只有你自己在使用,否则请谨慎操作。
    • 只使用 rebase 来清理本地的提交记录,千万不要尝试对已发布的提交进行操作。
  • 虽然 rebase 相对于我们已知的整合操作来说有着比较显著的优点,但是这也是在很大程度上取决于个人的喜好。一些团队喜欢使用 rebase,而另一些可能倾向于使用 merge 合并。此外,rebase 相对于 merge 合并来说是比较复杂的,除非你和你的团队确定会用到 rebase 操作。

文章来源地址https://www.toymoban.com/news/detail-403868.html

到了这里,关于Git之变基方式Rebase的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • git 三种合并方式(rebase / merge / squash)

    在使用 Git (分布式版本控制系统),往往不会直接在主分支上面直接开发,而是新建一个分支进行开发。 那么当我们在新分支上面完成一个功能时,便需要合并到主分支。 merge rebase and merge squash and merge 初始化 图 1 图1,初始两个分支的状态,现基于此对合并(merge)和变基

    2024年03月11日
    浏览(48)
  • Idea下面git的使用:变基、合并、优选、还原提交、重置、回滚、补丁

    变基是把本项目的所有提交都列出来按顺序一个个提交到目标分支上去 而合并是把两个分支合并起来,但是旧的分支还是可以启动其他分支,在旧的分支上继续开发 :::success 主动变基和被动变基的区别 ::: 没有什么区别变基,只是把合并的一种策略,把两个分支的有差异的提

    2024年02月08日
    浏览(46)
  • git ----拉去远端仓库产生冲突的解决方式

    # 出现冲突的原因     -1 多人在同一分支,修改了同一个地方的代码,出现的冲突     -2 分支合并时出冲突                     # 1 多人统一分支开发,修改了同样的代码          -某人修改了1.txt的第四行,提交了     -我操作:         -修改了1.txt第四行        

    2024年02月10日
    浏览(32)
  • git rebase 使用解决冲突

    只有一个分支master时,工作流程是 git clone master branch 在自己本地checkout -b local 创建一个本地开发分支 在本地的开发分支上开发和测试 阶段性开发完成后(包括功能代码和单元测试),可以准备提交代码 首先切换到master分支,git pull拉取最新的分支状态 然后切回local分支 通过

    2024年02月08日
    浏览(29)
  • 【Git系列】rebase的使用场景

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年04月25日
    浏览(19)
  • 使用git rebase合并多次commit

    可以对某一段线性提交历史进行编辑、删除、复制、粘贴;因此,合理使用rebase命令可以使我们的提交历史干净、简洁! 但是需要注意的是: 不要通过rebase对任何已经提交到公共仓库中的commit进行修改(你自己一个人玩的分支除外) 基本格式如下 其中-i的意思是–interacti

    2024年02月09日
    浏览(41)
  • 使用 git rebase 合并多个 commit

    首先我们查看一下当前提交历史: 我们通过 git rebase -i 61e7d87 将 44f23cb 、 9d2725f 和 da3ba01 这三个提交合并,这里的 61e7d87 为 待合并的提交区间的前一个提交的哈希值 。 执行之后会进入到 vim 编辑器中,每一行代表一个 todo 项。我们这里需要 pick 第一个提交并将后面两个提交

    2024年01月25日
    浏览(42)
  • Git 使用 rebase 修改历史提交记录

    运行以下这条命令之后,它会打开一个vim编辑器,我们就可以修改上一次commit时输入的提交信息。 接下来你要是想修改描述信息的话,直接键入: i ,此时进入了输入模式。 可用键盘上下键转到描述所在的那一行,然后进行修改。 修改完成后,按下 Esc  键退出编辑模式,在

    2024年02月02日
    浏览(42)
  • git:使用git rebase合并多次commit为一个

    git log:找到需要合并的最早 commit 的父级 git rebase -i 73a5cd8597 除第一个 pick 外,将其它改成 s,改完后保存退出 保存完后弹出 commit message 合并提示,根据这次合并的目的,重写commit message,改完后保存 修改为: 做完上述操作后,自动合并多个 commit 合并成为一个并提交,并生

    2024年01月25日
    浏览(38)
  • Git 变基与合并

    Git 提供了两种将分支合并到主分支的方法:rebase(合并) 和 merge(变基)。rebase 和 merge 都是用于集成某个分支到另一个分支的方法。然而,它们采用的方法不同。merge 会将两个分支直接合并成一个新的提交,而 rebase 则是将某个分支的提交复制到另一分支上,然后插入到目

    2024年02月02日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包