首页 > 其他分享 >git merage和git rebase合并分支

git merage和git rebase合并分支

时间:2023-02-10 17:24:00浏览次数:54  
标签:git rebase work merage master 分支

git merage和git rebase合并分支

在日常开发中,一般工作流程如下:

从主分支上拉取自己的工作分支
修改代码,完成工作
在自己分支上进行了commit
和主分支代码进行合并
推送到远端
向主分支提出合并请求

在完成工作的过程中,主分支上可能已经有了新的内容合入,所以需要合并工作分支和主分支的代码。

合并不同分支一般有两种方式:merage和rebase

git rebase

下面展示用rebase合并分支,达到的“变基”的效果:

  • A\B\C\M\N等表示分支上的commit改动
  • 变基的通俗解释:work分支是从master的B处拉出的分支,即基底是B;rebase之后,将work的基底变为master的C
rebase之前:
master: A --- B --- C
               \
work:           M --- N

rebase之后:
master: A --- B --- C
                     \
work:                 M' --- N'

rebase操作的思路

$ git checkout work
$ git rebase master
or
$ git rebase master work
#切换回自己的工作分支,执行rebase操作
#中途可以git rebase --abort,让分支还原到开始的状态

#git会提示哪些文件冲突,解决完冲突添加修改的文件
$ git add xxx
$ git rebase --contiune
#rebase是按照commit依次合并,所以可能需要多次contiune
#直到rebase完成

#如果推送到远端,需要-f强制推送
$ git push --force origin xxx

模拟实际操作

feature_work是自己的工作分支,从master分支分离之后,已经有其他内容合入了master分支。

也就是feature_work的主分支基,已经落后于当前master,我们需要把当前master的基替换到feature_work分支下。

操作完成后相当于:feature_work的基底是master最新的(自己修改的一些commit也会替换在最新的master基础上),这样就可以再提交合入主分支的申请。

  1. 更新本地master分支代码
$ git checkout master
$ git pull
  1. 切换回工作分支,执行rebase操作
$ git checkout feature_work
$ git rebase master

可以看到信息为"rebase readme"的commit执行合并
并且README.md文件冲突,需要去代码解决
  1. 添加修改后的冲突文件,执行rebase continue
$ git add README.md
$ git rebase --continue

信息为"start modification"的commit执行合并
start.cpp冲突,重复上述操作,直到所有的commit合并完成
  1. 这里如果更多commit有冲突,需要重复执行"解决冲突-add file-continue"的操作
$ git add start.cpp
$ git rebase --continue
Applying: start modification
#合并完成,最新的基底已经应用到'start modification'上了
  1. 提交到远端
#这时代码由于解决了和master的冲突,大概率会和当前分支远端存在冲突;并且没有新的commit产生,所以这时直接push不会成功
#-f强制推送到远端,注意当前分支上其他人的代码
$ git push origin feature_work --force

git merage

git merage操作分支的结构示意

  • O是merage后在work分支上新增的commit
merage之前:
master: A --- B --- C
               \
work:           M --- N

merage之后:
master: A --- B --- C ---
               \          \
work:           M --- N --- O

操作示例

#确保master代码更新,切换回工作分支
$ git checkout master
$ git pull
$ git checkout work

#执行merage操作,会产生一个Merage xx to xx ...的commit
$ git merage master

#也可以用git merage --abort放弃合并
解决冲突

#添加冲突文件,提交commit
$ git add xxx
$ git commit -m "xxx"

#推送到远端
$ git push origin work

两者的适用场景

在工作分支只有自己在修改的时候,使用git rebase可以减少多余的commit,
但分支是公共分支,有多人修改的时候,rebase可能会扰乱协作,应该使用merage合并分支。

git merage会产生记录merage步骤的commit,有时候会需要这些信息记录。

参考地址
https://blog.csdn.net/weixin_42310154/article/details/119004977
https://blog.csdn.net/mocas_wang/article/details/106750498

标签:git,rebase,work,merage,master,分支
From: https://www.cnblogs.com/TaXueWuYun/p/17109711.html

相关文章

  • 解决GitHub无法访问、进去页面卡顿慢的问题
    1.查询当前github对应的ip地址百度搜索ip查询工具,或直接访问https://tool.lu/ip/。输入github官网网址即可查询到ip 2.寻找hosts映射文件 C:\Windows\System32\dr......
  • git使用笔记
    gitbranch查看当前所处分支gitbranch-a查看所有分支gitcheckoutxxxxx切到某个分支(gitcheckout.恢复到当前文件夹未修改的状态)gitstatus.查看当前目录下代码状态g......
  • Git 版本回退reset,revert
    一、gitreset的用法简单的来说,gitreset命令既可以回退版本,也可以把暂存区的修改回退到工作区。gitreset命令又可以分为gitreset--hardxxx和gitreset--softxxx......
  • git中patch的用法
    Git的patch用法是指通过创建一个补丁文件来修改或提交Git仓库中的代码。一个patch文件是一种文本文件,它记录了将要在仓库中执行的代码更改。您可以创建补丁文件并将......
  • ssh建立github连接 基于ssh密钥
    1.建立公钥和私钥ps:公钥放在github上面的,私钥放在自己本地电脑;先生成密钥:打开gitbash输入命令:ssh-keygen-trsa-b4096-C"[email protected]"结果:Genera......
  • Git基本使用
    1.git介绍1.1.版本控制系统集中式版本控制系统集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新......
  • 网页能看github,但是ping不通
    github经常ping不通或者访问缓慢,参考特立独行MVP的帖子,问题得到了解决,记录一下,毕竟,这种问题每隔一段时间就会发生。方法是更改hosts文件#修改/etc/hostssudovim/etc......
  • 罗技Logitech M557蓝牙鼠标更换左键微动开关【已修复】
    故障:鼠标左键单击变双击维修:更换微动开关这里我选择的是欧姆龙微动【蓝】(店家号称寿命有5000W次)本来以为很简单的事情,结果反复折腾了一下午~(大无语事件)于是顺便做一下......
  • git 怎么使用一个命令把本地修改push到多个remote上?
    参考这个答案:https://stackoverflow.com/questions/5785549/able-to-push-to-all-git-remotes-with-the-one-command可以再看看这个评论 Supercooltrick!Theonlydis......
  • 新项目克隆代码出现fatal: Unencrypted HTTP is not supported for GitLab. Ensure th
    ###新项目克隆代码出现fatal:UnencryptedHTTPisnotsupportedforGitLab.EnsuretherepositoryremoteURLisusingHTTPS报错话不多说,直接上图到网上也查了......