博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
git rebase命令
阅读量:7069 次
发布时间:2019-06-28

本文共 2718 字,大约阅读时间需要 9 分钟。

git rebase 命令

git rebase是一个非常有用的命令,但可能熟悉它的人比较少。下面介绍一下git rebase的常见用法。

git rebase branch

我们在作分支合并的时候最常用的就是merge操作,但是执行merge之后,会产生一个新的commit,例如:Merge branch 'branch-1'。这个commit把两个branch合并到一起并作了一次新的提交。但是,如果使用rebase的话就会避免这个问题。我们来看一个例子,下边是我分别用merge和rebase之后的git log。

* 5eaa8f8 (HEAD -> master) commit 8* fdadab0 commit 7* 690e761 (branch-2) commit 10* f8bcb41 commit 9*   a1e3e91 Merge branch 'branch-1'|\  | * da2448e (branch-1) commit 6| * c4ef94a commit 5* | c70cc70 commit 4* | 31fde3f commit 3|/  * faf3890 commit 2* 0f1f7a8 commit 1

我的操作历史如下:首先,在master创建进行了两次提交(commit 1, commit 2)-> checkout新的分支branch 1 -> 在master上进行两次提交(commit 3, commit 4)-> 在branch 1上进行两次提交(commit 5, commit 6)-> checkout到master,执行git merge branch-1。然后merge完成后便产生了a1e3e91 Merge branch 'branch-1'这个提交。

接着我们演示rebase,checkout 新分支branch 2 -> 在master上进行两次提交(commit 7,commit 8)-> checkout到branch 2上,进行两次提交(commit 9, commit 10)-> checkout到master执行git rebase branch-2。这时我们来看主干分支,并没有产生多余的提交。

git rebase branch-2命令执行的时候会把"master"(即当前分支)分支里的每个提交(commit)取消掉,并且把它们临时保存为补丁patch(这些补丁放到".git/rebase"目录中),然后把"master"分支更新到最新的"branch-2"分支,最后把保存的这些补丁应用到"master"分支上。这些新应用的commit将会是新的commit,commit号会变。上例中commit 7,commit 8的commit号已经变了(原有的commit号分别是:cc4df2d,c86a6da)。

git pull --rebase

当我们从远程拉代码的时候如果使用:git pull --rebase,则会以rebase的方式进行更新,而不是默认的merge。

git rebase --interactive

git rebase用来修复commit,比如修改某次提交,修改commit message,squash。该命令可以简写为git rebase -i。执行该命令之前需要当前branch已经设定过upstream,使用git branch --set-upstream-to=<remote>/<branch>可以设定upstream。执行rebase -i命令后的交互如下,我已经针对commit做了修改:

GNU nano 2.5.3                    File: /home/focusj/3stone/diamond/.git/rebase-merge/git-rebase-todo                                                pick c4a4b5d testsquash c4a4b6d testdrop c4a4b7d test# Rebase 0df8fd7..c4a4b5d onto 0df8fd7 (1 command(s))## Commands:# p, pick = use commit# r, reword = use commit, but edit the commit message# e, edit = use commit, but stop for amending# s, squash = use commit, but meld into previous commit# f, fixup = like "squash", but discard this commit's log message# x, exec = run command (the rest of the line) using shell# d, drop = remove commit#                                                                 [ Read 20 lines ]^G Get Help     ^O Write Out    ^W Where Is     ^K Cut Text     ^J Justify      ^C Cur Pos      ^Y Prev Page    M-\ First Line  M-W WhereIs Next^X Exit         ^R Read File    ^\ Replace      ^U Uncut Text   ^T To Spell     ^_ Go To Line   ^V Next Page    M-/ Last Line   M-] To Bracket

下边说下几个command的用处:

p:保留当前commit,不做处理。
r:修改commit message。
e:修改这个commit作的修改。比如某个commit漏掉了什么配置,想要再提交新的文件; 或者删除一些无用代码,等等都可以用这个命令。
s:保留这个commit的修改,但是把它合并到前一个commit中。
d:删除commit。
我们使用命令,只需要把命令放到mouge commit前边保存退出既能生效。

write on 2017-1-3

转载地址:http://fuell.baihongyu.com/

你可能感兴趣的文章
Bridge mode
查看>>
python - PyDev统一编码
查看>>
jQuery 中的 HTML 操作
查看>>
linux ssize_t与size_t
查看>>
数据读取器---获取数据的信息
查看>>
Android游戏开发中使用Libgdx引擎遇到的问题及解决办法汇总
查看>>
C++文件的批处理
查看>>
CPU-bound(计算密集型) 和I/O bound(I/O密集型)
查看>>
线性时间 筛素数,求前n个数的欧拉函数值,求前n个数的约数个数
查看>>
Spring 中JDKProxy和CGlibProxy的区别
查看>>
在Map 3D显示管理器中更改当前地图的名字
查看>>
通俗解释WIndows上的CRITICAL SECTION
查看>>
下载文件使用缓存(一次性读取到内存),优化性能(注意静态对象修改需要加锁)...
查看>>
第39周星期四认真Java开发第二天小结
查看>>
组织行为学对项目管理的意义(2):人格的大五模型
查看>>
NGUI Sprite Type(Simple、Sliced、Tiled、Filed、Advanced)
查看>>
Windows Phone开发(12):认识一下独具个性的磁贴
查看>>
每日英语:Six Ways to Modernize Your Car
查看>>
使用VS2010开发Qt程序的一点经验
查看>>
tpl demo
查看>>