Git -- Rebase

简介: git rebase: 这个命令可以把一个分支上commit的变化放到另一个分支上重新上演一遍. 简单的Rebase例子. 首先准备好一个git项目. 做一个feature分支, 然后做几个commits.

git rebase: 这个命令可以把一个分支上commit的变化放到另一个分支上重新上演一遍.

简单的Rebase例子.

首先准备好一个git项目.

做一个feature分支, 然后做几个commits.

回到master分支, 再做几个commits. 然后 rebase.

最后使之达到这个效果:

现在我想让master分支rebase到my-feature分支上:

回到my-feature分支, rebase一下master上发生的变化:

在我想要rebase进去的分支上执行命令: git rebase 源分支名.

git rebase master

注意发生的变化, log里面没有分叉了.

再做一个变化,

然后commit.

现在在my-feature分支上的动作结束了, 该回到master分支了.

查看之前在master分支修改的内容, 发现没有了. 回到了最初没修改时的状态.

然后执行fast-forward merge即可:

最后删除my-feature分支即可.

 

冲突.

做一些修改, 然后commit.

再创建一个分支 trouble, 然后切换到该分支.

做一些修改, 再commit.

然后再回到master分支, 然后再做一些冲突的修改.

切换到trouble分支.

然后用可视化工具进行diff:

有两处冲突.

然后尝试rebase:

不出所料, 有冲突发生, 当前处于rebase暂停阶段.

这时可以放弃rebase (abort):

git rebase --abort.

查看log:

可以看到没发生变化.

 

解决冲突:

再次尝试rebase:

由于有冲突, 所以停留在了rebase的冲突阶段.

然后使用可视化merge工具:

解决好所有的冲突之后, 保存. 

查看状态:

然后执行git rebase --continue.

查看log:

 

然后再做一个修改, 还是修改同一个文件. 然后commit.

当前领先master两个commits.

然后整合变化到master.

又是一个fast forward merge.

查看log:

没有分叉了.

 

Rebasing 远程分支(Github).

先执行git pull origin master, 然后 git push origin master.

然后修改某个文件.

然后我再github上面修改该文件(需要造成冲突), commit.

然后查看状态:

这里显示的是: 我当前的分支领先于origin/master 两个commit.

这时就需要更新引用(把可以代表历史的东西都带下来), 需要使用 git fetch 这个命令.

git fetch origin master

现在所有的引用都已经更新了.

这时查看状态:

可以看到远程和本地分支有分歧.

这次我想做的是, 想让我本地的commits合并后放在远程分支的前边.

这时可以使用git pull, 但是需要加一个参数, 使得rebase可以发生:

git pull --rebase origin master.

git pull --rebase origin master

 

由于有冲突, 所以要进行merge,

 

merge结束后, 继续rebase:

然后跳过这次commit:

git rebase --skip.

OK

 

下面是我的关于ASP.NET Core Web API相关技术的公众号--草根专栏:

目录
相关文章
|
6月前
|
开发工具 git
git merge和git rebase异同
git merge和git rebase异同
170 0
|
开发工具 git
成功解决git rebase问题:First, rewinding head to replay your work on top of it...
成功解决git rebase问题:First, rewinding head to replay your work on top of it...
|
6月前
|
JSON 开发工具 git
git rebase 合并当前分支的多个commit记录
git rebase 合并当前分支的多个commit记录
125 1
|
5月前
|
开发工具 git 开发者
【git merge/rebase】详解合并代码、解决冲突
【git merge/rebase】详解合并代码、解决冲突
577 0
|
3月前
|
开发工具 git 开发者
|
2月前
|
网络性能优化 开发工具 git
使用git rebase --onto一例
使用git rebase --onto一例
|
5月前
|
安全 开发工具 git
蓝易云 - git rebase和merge区别
在选择使用Merge还是Rebase时,需要根据具体的工作流程和团队的规定来决定。一般来说,如果你想保持完整的历史记录并且避免可能的冲突,你应该使用Merge。如果你想要一个干净的、线性的历史记录,你可以使用Rebase。
49 4
|
4月前
|
开发工具 git 开发者
git IDEA的分支合并时的冲突问题总结,merge和rebase的区别
冲突的处理需要开发者之间的充分沟通以及对项目历史的细致理解。选择Merge或Rebase取决于具体的工作流程和团队偏好,但最重要的是保持代码库的整洁与一致性。使用IDEA等工具可以提高处理合并冲突的效率,但手动解析冲突和理解操作背后的逻辑仍然是不可或缺的。最终目标是通过有效的版本控制实践,促进项目的顺利进行和团队协作的高效。
303 0
|
6月前
|
开发工具 git
git pull之后出现REBASE(1/1)
git pull之后出现REBASE(1/1)
404 3
|
6月前
|
开发工具 git 开发者
【专栏】探讨了 Git 中的 `git rebase` 操作,它用于重新应用提交到另一分支,改变历史顺序
【4月更文挑战第29天】本文探讨了 Git 中的 `git rebase` 操作,它用于重新应用提交到另一分支,改变历史顺序。与 `git merge` 不同,rebase 重写提交历史,提供简洁线性的历史记录。文章介绍了 rebase 的基本操作、应用场景,如整理提交历史、解决冲突和整合分支,并强调了使用注意事项,如避免在公共分支上操作。尽管 rebase 可以带来整洁的历史和冲突解决便利,但其潜在的风险和可能导致的历史混乱需谨慎对待。理解并恰当使用 `git rebase` 可以提升开发效率和代码质量。
191 1