Git rebase
说实话我挺惭愧的,学了两年半的git,今天才会git rebase。
准备工作
准备一个git仓库,简单点就行。这里我用gitlab做实验展示
然后导到本地
然后创建两个分支,分别是我晗哥和佳姐的开发分支
接下来切换到晗哥的branch。
现在晗哥修改readme.md文件
然后提交到git服务器,提出merge request
以上都不是重点,默认你们都会。
然后就merge进去,看看main变成啥样了
接下来呢,佳姐也开始修改readme
同样提交代码,发起merge request
不出意外,出现了冲突
这个时候我们开始rebase
- 第一步,将最新的main分支拉到本地
PS D:\Users\Administrator\IdeaProjects\learnrebase> git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
PS D:\Users\Administrator\IdeaProjects\learnrebase> git fetch
remote: Enumerating objects: 1, done.
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 1
Unpacking objects: 100% (1/1), 247 bytes | 41.00 KiB/s, done.
From gitlab.com:c3965/learnrebase
acb9fa5..6d8ba08 main -> origin/main
PS D:\Users\Administrator\IdeaProjects\learnrebase> git pull
Updating acb9fa5..6d8ba08
Fast-forward
README.md | 93 +--------------------------------------------------------------
1 file changed, 1 insertion(+), 92 deletions(-)
PS D:\Users\Administrator\IdeaProjects\learnrebase>
- 接下来切回 jiajie 分支
PS D:\Users\Administrator\IdeaProjects\learnrebase> git checkout jiajie
Switched to branch 'jiajie'
Your branch is up to date with 'origin/jiajie'.
PS D:\Users\Administrator\IdeaProjects\learnrebase>
- 然后rebase,肯定有冲突,别急
PS D:\Users\Administrator\IdeaProjects\learnrebase> git rebase main
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
error: could not apply 41d9a5a... jia first commit
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 41d9a5a... jia first commit
PS D:\Users\Administrator\IdeaProjects\learnrebase>
console信息也告诉我们,问题出在了 README.md上面,那么看看idea中这个文件啥状态
以=====为分割, 上面是main,下面是jiajie的分支修改。我们要做的就是解决这块的冲突。比如佳姐认为应该先执行她的代码,
那我就改成这样
4. 重点来了, 改好之后先要 add 然后再 continue
PS D:\Users\Administrator\IdeaProjects\learnrebase> git add .\README.md
PS D:\Users\Administrator\IdeaProjects\learnrebase> git rebase --continue
然后跳入 vim, 按i进入编辑模式,这里我修改了第一行的信息,标注是我做的rebase
然后 esc + : + wq 保存并退出(按理说这个你们也应该会)
注意:由于idea的terminal设置,有的人按esc会直接跳到上面的代码编辑区。这里分享一个解决办法https://www.jianshu.com/p/f1ae155cda6e
- 最后 git push。 你会发现push不上去
PS D:\Users\Administrator\IdeaProjects\learnrebase> git add .\README.md
PS D:\Users\Administrator\IdeaProjects\learnrebase> git rebase --continue
[detached HEAD d92f2c3] rebased by siwen
1 file changed, 9 insertions(+), 1 deletion(-)
Successfully rebased and updated refs/heads/jiajie.
PS D:\Users\Administrator\IdeaProjects\learnrebase> git push
To gitlab.com:c3965/learnrebase.git
! [rejected] jiajie -> jiajie (non-fast-forward)
error: failed to push some refs to 'gitlab.com:c3965/learnrebase.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
PS D:\Users\Administrator\IdeaProjects\learnrebase>
这个时候我们就要用到下面这个命令
PS D:\Users\Administrator\IdeaProjects\learnrebase> git push --force-with-lease origin jiajie
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 293 bytes | 293.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: View merge request for jiajie:
remote: https://gitlab.com/c3965/learnrebase/-/merge_requests/2
remote:
To gitlab.com:c3965/learnrebase.git
+ 41d9a5a...d92f2c3 jiajie -> jiajie (forced update)
PS D:\Users\Administrator\IdeaProjects\learnrebase>
接下来我们去gitlab页面看看
可以merge咯,看看merge以后main分支啥效果,
完美!!!学会了点个收藏给个赞呗
One more thing
需要Copilot、JetBrains 全家桶全插件全主题,详情可以咨询客服,关注【AIGoland之星】,添加“星标”, 获取每天技术干货,突破自我,成为牛逼架构师。
例如:
回复【ebook】百余本精选电子书
回复【jetbrain】解放开发工具
更多惊喜关注后获得