前言
在开发过程中, 我们有的时候会有代码提交失误的情况. 在前一章, 我们介绍了git push - - force
命令. 本章我们介绍git rebase
命令及 SourceTree内的相关操作.
当前状况 & 目标
当前状况
当前状况. 我们可以看到. 当前有2个分支.
- master 分支:
<d53dcf7> -- <de1f522>
- tmp 分支:
<d53dcf7> -- <ad85a6G> -- <b89316c>
- 目标: 更新tmp分支.
<d53dcf7> -- <de1f522> -- <rebase合并 (ad85a6G) / (b89316c)>
目标状况
- tmp分支:
d53dcf7> -- <de1f522> -- <rebase合并节点 (63af0ce)>
SourceTree 操作
-
首先, 选中当前分支为
tmp
分支. 选中master
分支头节点. 选择交互式变基础.
-
点击
squash
合并之前的2次提交记录.
此处. 如果你想保留之前的提交记录就不用squash
了. -
点击确定, 发现当前节点状态如下.
注意. 可以发现origin/tmp
还是保留那个之前的记录的. 但是新的tmp
则不同. 可以明显发现已经rebase
了. -
推送更新远端
git push --force
注意git push --force
一般是在你自己的个人分支上执行. 如果项目组有其他人, 建议提前和其他人交流一下.
[1]. 用了两年git,rebase原来这样用
[2]. [sourcetree] rebase的使用
[3]. 在sourceTree 中使用 rebase (变基)
[4]. git rebase使用笔记
Git 命令方式
非合并变基
-
git rebase -i <基础节点名称>
rebase之后. 出现图2. 表示变基内的所有更新. 此处出现文件冲突. -
手动合并冲突后. 添加冲突的文件.
git add README.md
-
git rebase --continue
-
git push --force
随后更新远端分支即可.
Tips
我们有时候可以放弃rebase操作.
rm -fr ".git/rebase-merge"
git rebase --continue | --abort | --skip
多节点Merge成一个提交
# 合并2次提交
pick 50b1ccf [rebase-merge] tmp2 2 in 1. squash.
squash 600a1ca
- 解决冲突
- 修改
README.md
冲突文件
# letcode-all
练尽LetCode所有都题目。 天下没有难写的算法。嘿嘿。
---
<<<<<<< HEAD
### 目录3
=======
Tpm2 -
### 目录
>>>>>>> 50b1ccf... tpm2
* 算法
* 多线程
* SQL
---
### 算法练习目录
提交
git add README.md
git rebase --continue
- 注意几次提交记录的编写
- 成果
如果有需要的话.git push --force
同样更新远端即可.
总结
- 切换到需要Rebase的分支.
git rebase -i <节点ID>
单次提交不需要操作
. /合并提交. 更新squash
.无冲突即可成功
. /存在冲突, git add <confilct-file> / git rebase --continue
.- 需要更新远端
git push --force
.
Others
git checkout master git pull git checkout local git rebase -i HEAD~2 //合并提交 --- 2表示合并两个 git rebase master---->解决冲突--->git rebase --continue git checkout master git merge local git push