2

git rebase 命令主要啥作用

 1 year ago
source link: https://www.v2ex.com/t/888739
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  程序员

git rebase 命令主要啥作用

  echooo0 · 9 小时 56 分钟前 · 1887 次点击

有 2 个分支,分别是 dev 和 master ,各有线下和线上的配置文件,

以前一般用的都是 check out 到 master 分支后,把 dev 改动的部分 merge 进来,

刚刚不小心在 dev 分支误点了 Rebase dev onto master , 会有啥问题吗?

23 条回复    2022-10-21 21:18:46 +08:00
ysc3839

ysc3839      9 小时 52 分钟前   ❤️ 3

一般是在分支 A 某个 commit fork 出了分支 B 进行开发,同时分支 A 又有新提交,用 rebase 可以把分支 B 的那些提交“叠”到分支 A 最新的提交上面
f5a599

f5a599      9 小时 51 分钟前

让别人能 ff-only ,很安心
gtexpanse

gtexpanse      9 小时 50 分钟前

我是用来保持分支线整洁,代码 review 或者追溯历史 commit 的时候清晰明了
ysc3839

ysc3839      9 小时 47 分钟前

还有一个很好用的功能是 interactive rebase ,可以很方便地修改某一个分支,或者执行 squash 操作
optional

optional      9 小时 44 分钟前 via iPhone

可以保持主干清爽,单人单功能开发的时候非常清晰。
但是功能分支也是协作开发的时候,冲突会比较麻烦,反而不好追溯历史。
wangxiaoaer

wangxiaoaer      9 小时 38 分钟前

有个项目基于开源项目定制,是从 master 切换到某个 tag ,然后拉出来一个 dev 分支做自己的开发。同时还要定期同步上游的最新更新,目前就是当上游有新 tag 发布时,切换到 master ,pull ,就拉下来,然后回到 dev 分支 rebase 最新 tag 。
javlib

javlib      9 小时 32 分钟前

只有 2 个分支,恐怕不能用 rebase ,容易搞出问题。

举一个 rebase 实用的场景:如果每个 feature / bug 都是用一个分支,而且只有一个开发人员在这条分支开发,开发完成后,准备往 mater/dev 合并,如果之前做了多次 commits ,会显得很凌乱,这时候可以用 rebase ,把多个 commits 合并成 1 个。
grit136907108

grit136907108      9 小时 31 分钟前

我主要用来合并本地提交记录
echooo0

echooo0      9 小时 31 分钟前

@ysc3839 #2 这样的话,A 就不会按照提交时间顺序排列,而是 "叠" 的顺序排列对吧
ysc3839

ysc3839      9 小时 29 分钟前

@echooo0 是的,不过 B 分支的 commit 最初的提交时间是会保留的,可能会出现 A 分支中 commit 晚提交在下面,B 分支中 commit 早提交在上面
andyJado

andyJado      8 小时 46 分钟前

其实就是重复执行 cherrypick
cnoder

cnoder      8 小时 42 分钟前

简单说 直接 merge 是菱形线,rebase 是一条线。一条线方便看写
lessMonologue

lessMonologue      8 小时 33 分钟前

主要是其中无 merge 时,多次提交合并成一个提交,保持 commit 清晰
f6x

f6x      8 小时 33 分钟前   ❤️ 4

你的树好难看啊
你的提交把我的树弄丑了
你每次合并为什么总是这么慢
你这堆中间版本压缩一下
曾经有一个拼写错误被我 commit 了, 没 push 的话还有补救机会么?
liquid207

liquid207      7 小时 30 分钟前   ❤️ 1

git rebase: 修改分支的起点

git rebase -i: 合并 commit, 修改 commit, 调整 commit 的顺序
unco020511

unco020511      7 小时 22 分钟前

你可以理解为在你原来的 commit 改写并生成新的 commit,然后提交
dqzcwxb

dqzcwxb      7 小时 3 分钟前

libook

libook      6 小时 49 分钟前

rebase 可以把一个分支上的提交复制出来并挨个重新提交到另一个分支上,也就是说虽然修改内容一样,但提交的 commit id 会不同,新提交的时间也会变成 rebase 的时间。
merge 就是把一个分支上的提交原样合并到另一个分支上去,同时创建一个合并提交来记录这个合并操作。
我个人建议不要滥用 rebase 。版本控制系统的价值在于回溯代码修改版本,merge 能记录更多有用的信息,特别是在多人合作的时候,但 rebase 不行,你可以在自己的分支对自己的提交进行 rebase ,但是最好不要跨多人的工作使用 rebase 。
pengtdyd

pengtdyd      4 小时 45 分钟前

rebase 这个还不明显吗,--help 看一下不就行了吗,有这时间发帖,一个命令早就知道了。
ClericPy

ClericPy      3 小时 47 分钟前

拉 PR 时候其中一种方式, 还有俩是 merge 和啥来着

反正挨骂几次分支不小心整出圈儿来就记住要 rebase 了... 一根儿的分支树确实好看很多

git flow 还是 Github flow 是不是提到过相关规范

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK