4

git rebase 命令主要啥作用

 2 years 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.
neoserver,ios ssh client

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 是不是提到过相关规范

Recommend

  • 59
    • Reddit www.reddit.com 5 years ago
    • Cache

    Git rebase in depth : git

    r/git:

  • 97

  • 17
    • www.cnblogs.com 4 years ago
    • Cache

    聊下 git rebase -i

    在使用git作为源代码管理工具的时候,开发的时经常会面临一个常见的问题,多个commit 需要合并为一个完整的commit提交。 在一个基本的迭代周期里,你会有很多次commit,有跟配置文件相关的,有跟代码相关的,甚至有跟下次发布fixbug相关的。这些都是你在...

  • 19

    Interactive Git Tutorials – Rebase and Bisect Interactive Git Tutorials Following on from my earlier post on practising grep, this post shows...

  • 10
    • blog.mathieu-leplatre.info 4 years ago
    • Cache

    Avec Git rebase, vos arbres poussent droit

    Avec Git rebase, vos arbres poussent droitAvec Git rebase, vos arbres poussent droit Fri 16 September 2011 Le problème Par défaut, un git pull est équivalent à git fetch et git merge. Les merge, c'est bien pour l...

  • 17

    How to update a forked repo with git rebase – Git Many times you might came across to update/sync your forked repository with main repo. There are multiple ways but below one is very efficient way to sync your forked rep...

  • 12
    • www.cnblogs.com 4 years ago
    • Cache

    聊下git pull --rebase

    聊下git pull --rebase 有一种场景是经常发生的。 大家都基于dev...

  • 9
    • morrisjobke.de 4 years ago
    • Cache

    How to do a git rebase - Morris Jobke

    How to do a git rebase 03 Dec 2015 How I do the git rebase: checkout master and fetch the latest stuff: $ git checkout master $ git pull

  • 18
    • yanhaijing.com 4 years ago
    • Cache

    Git在rebase时如何保留merge commit

    原文网址:http://yanhaijing.com/git/2020/09/23/git-rebase-merge/ rebase是git中一个神奇的命令,可以让并...

  • 15
    • lotabout.me 4 years ago
    • Cache

    Git: merge vs rebase

    Table of ContentsMerge 还是 Rebase,这是一个问题。网上有许多教程说明二者的区别,之前我写的一个 关于 Git 的 PPT 里也说过两者的区...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK