首页 > 其他分享 >git rebase -i 使用记录

git rebase -i 使用记录

时间:2023-06-02 16:08:10浏览次数:27  
标签:git quot 18 rebase 09 add 2015 记录


用 git rebase -i 命令即可实现,下面我将演示一下这个命令:

①首先,我有一个新的仓库,只有一个空提交。

Mac: demo$ git hi
dccff7e 2015-09-18 | initial commit (empty) [fuhaiwei]



②在master分支添加一个文件,并提交。


Mac: demo$ touch master_file
Mac: demo$ git add master_file
Mac: demo$ git commit -m "add master_file"
[master a4959da] add master_file
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 master_file
Mac: demo$ git hi
a4959da 2015-09-18 | add master_file [fuhaiwei]
dccff7e 2015-09-18 | initial commit (empty) [fuhaiwei]



③新开一个分支develop,并添加三个提交。


Mac: demo$ git branch develop
Mac: demo$ git checkout develop
// 省略命令若干
Mac: demo$ git hi
28646e2 2015-09-18 | add develop3 [fuhaiwei]
c341f75 2015-09-18 | add develop2 [fuhaiwei]
22f95c8 2015-09-18 | add develop1 [fuhaiwei]
a4959da 2015-09-18 | add master_file [fuhaiwei]
dccff7e 2015-09-18 | initial commit (empty) [fuhaiwei]



④使用 rebase -i 命令合并历史提交


Mac: demo$ git rebase -i a4959da
会出现如下界面:

<img src="/i/li/?n=2&i=images/blog/202305/26144306_647054fa8dcae76260.png?,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=" data-rawwidth="956" data-rawheight="374" class="origin_image zh-lightbox-thumb" width="956" data-original="https://pic1.zhimg.com/1cefcbf82450e17d61b521fda5fde164_r.png">将想要合并进前一个提交的提交,前面的pick 改成 s,保存退出。


git rebase -i 使用记录_git

将想要合并进前一个提交的提交,前面的pick 改成 s,保存退出。


<img src="/i/li/?n=2&i=images/blog/202305/26144306_647054fac070f96787.png?,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=" data-rawwidth="958" data-rawheight="374" class="origin_image zh-lightbox-thumb" width="958" data-original="https://pic4.zhimg.com/ca458f117adbd2d9bc1c8033da7676a7_r.png">这时又会进入一个界面,是让你输入想要三个提交合并后的提交信息。


git rebase -i 使用记录_rebase_02

这时又会进入一个界面,是让你输入想要三个提交合并后的提交信息。


<img src="/i/li/?n=2&i=images/blog/202305/26144306_647054faea6e399483.png?,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=" data-rawwidth="856" data-rawheight="330" class="origin_image zh-lightbox-thumb" width="856" data-original="https://pic3.zhimg.com/a14e1456a9e48645e1055c1462699e3e_r.png">将前面的都删掉,在第一行输入想要的提交信息即可,第二行有个空行最好保留。保存退出。


git rebase -i 使用记录_git_03

将前面的都删掉,在第一行输入想要的提交信息即可,第二行有个空行最好保留。保存退出。


<img src="/i/li/?n=2&i=images/blog/202305/26144307_647054fb18a8f5183.png?,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=" data-rawwidth="954" data-rawheight="126" class="origin_image zh-lightbox-thumb" width="954" data-original="https://pic2.zhimg.com/4d94c316440b4cbda8d7c944bed5ce19_r.png">


git rebase -i 使用记录_5e_04


Mac: demo$ git rebase -i a4959da
[detached HEAD 5ec37e0] add develop1 develop2 develop3
 Date: Fri Sep 18 09:17:13 2015 +0800
 3 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 develop1
 create mode 100644 develop2
 create mode 100644 develop3
Successfully rebased and updated refs/heads/develop.
Mac: demo$ git hi
5ec37e0 2015-09-18 | add develop1 develop2 develop3 [fuhaiwei]
a4959da 2015-09-18 | add master_file [fuhaiwei]
dccff7e 2015-09-18 | initial commit (empty) [fuhaiwei]

可以看到,这时三个提交已经合并了。



⑤将develop分支合并到master分支


Mac: demo$ git checkout master 
Switched to branch 'master'
Mac: demo$ git merge develop 
Updating a4959da..5ec37e0
Fast-forward
 develop1 | 0
 develop2 | 0
 develop3 | 0
 3 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 develop1
 create mode 100644 develop2
 create mode 100644 develop3
Mac: demo$ git hi
5ec37e0 2015-09-18 | add develop1 develop2 develop3 [fuhaiwei]
a4959da 2015-09-18 | add master_file [fuhaiwei]
dccff7e 2015-09-18 | initial commit (empty) [fuhaiwei]




总结:git rebase -i 可以交互性的改变提交历史,包括但不限于改变某次提交的内容,改变提交的顺序,去除某次提交,合并某些提交。



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


当然上面的问题还有更暴力的方法可以解决,就是先 reset 到修改之前的状态,然后在重新发起一次提交。


① 首先恢复到合并之前的状态


Mac: demo$ git checkout develop 
Switched to branch 'develop'
Mac: demo$ git reset --hard 28646e2
HEAD is now at 28646e2 add develop3
Mac: demo$ git hi
28646e2 2015-09-18 | add develop3 [fuhaiwei]
c341f75 2015-09-18 | add develop2 [fuhaiwei]
22f95c8 2015-09-18 | add develop1 [fuhaiwei]
a4959da 2015-09-18 | add master_file [fuhaiwei]
dccff7e 2015-09-18 | initial commit (empty) [fuhaiwei]



②重置本地仓库和暂存区到修改之前的状态


Mac: demo$ git reset a4959da
Mac: demo$ git hi
a4959da 2015-09-18 | add master_file [fuhaiwei]
dccff7e 2015-09-18 | initial commit (empty) [fuhaiwei]

注意此时本地仓库已经被重置,但是工作区的内容是修改之后的内容。


注意:这里千万不要打成 git reset --hard a4959da,要不然连工作区的内容都没了。
(万一不小心打错了,导致修改的数据都没了,不要慌,翻看前面的内容,找到最新提交的ID,git reset --hard 28646e2,即可找回。或者git reflog查看HEAD记录,找到这个ID)



③重新发起一次提交即可


Mac: demo$ git add .
Mac: demo$ git status
On branch develop
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	new file:   develop1
	new file:   develop2
	new file:   develop3

Mac: demo$ git commit -m "add develop1 develop2 develop3"
[develop b36bff8] add develop1 develop2 develop3
 3 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 develop1
 create mode 100644 develop2
 create mode 100644 develop3
Mac: demo$ git hi
b36bff8 2015-09-18 | add develop1 develop2 develop3 [fuhaiwei]
a4959da 2015-09-18 | add master_file [fuhaiwei]
dccff7e 2015-09-18 | initial commit (empty) [fuhaiwei]

标签:git,quot,18,rebase,09,add,2015,记录
From: https://blog.51cto.com/u_16131207/6403427

相关文章

  • Github PR 时合并多次提交的 git commits All In One
    使用场景:(一个组里的兄弟)在一个分支里,提交多次,产生多个commit,然后提pr。正常情况下,合并到main分支,也会带着多次pr。期望:将分支中多个commit在合并至main时变为一个commit 解决办法: https://www.cnblogs.com/xgqfrms/p/16464515.html   终极解决办法(原理):  htt......
  • 使用Hutool的@Alias注解和JSONUtil.toJsonStr()的问题记录
    表格如下: 定义类结构如下:  使用fastjson转换后的结果                                使用hutool的JSONUtil转换之后的结果      可以看到JSONUtil类转换之后格式并不是我们需要的类的字......
  • git指定用户名或token下载,从指定分支拉取代码并上传到指定分支
    指定用户名下载 密码中如果有某些符号如'>',我们需给他编码'%3E'gitclonehttps://username:[email protected]/xxx.git 指定token下载  附带代理(生成token时一定要保存,否则以后看不到的)gitclonehttps://[email protected]/xxx.git--config"http.proxy=http:......
  • UE5 打包出错记录
    前言查看日志文件,搜索error查看对应的错误信息一[Compiler]正在使用的引脚 <Unnamed> 已不存在于节点 ReadText 上。请刷新节点或断开连接来移除引脚。请确保已针对 ReadText 对'AmmoniaLabel’进行了编译解决方案删除ReadText节点......
  • 算法刷题记录:日历中的数字
    题目链接https://ac.nowcoder.com/acm/contest/19859/B题目分析很简单的一道数位统计的题目其中年和月是乘法原理。(固定住年和月,枚举该月有几天,所以是乘法原理)当x=0并且month<10时,月需要特判一位数的情况,是加法原理日是加法原理AC代码//Problem:日历中的数字//Cont......
  • WindTerm GitHub 上 收获 6.6k 的 star。 多了自动补全命令,高速传输模式,上传下载速
    继 Tabby、Warp 后,今天再来给大家推荐一款终端神器——WindTerm,完全开源,在GitHub上已经收获6.6k的star。https://github.com/kingToolbox/WindTermWindTerm ,目前功能最全又最良心的SSH遠程終端連接器【開源地址】【下載鏈接】如何手动添加WindTerm快捷键能够自定义添......
  • Git Commit Log 相关规范及定义
    GitCommitLog相关知识一.commitlog规范的意义便于程序员对提交历史进行追溯,方便追责(笑)约束commitmessage,意味着每次提交都有意义,因此需要慎重的进行提交;不能将所有的文件都放到一个commit里面;一个commit一个文件,这样才能更加细化提交的功能格式化的c......
  • Git emoji手册
    title:gitemoji手册tags:-手册-gitcategories:-手册emojiemoji代码commit说明......
  • GitLab 服务搭建
    1.GitLab概述GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。GitLab产品将分为三个发行版本CE(社区版):发行版将继续在全球范围内提供EE(企业版):发行版仅在中国境外出售JH(JiHu版):发行版仅在中国销售GitLab的架构图(来源官网:http......
  • SQL Server利用ROW_NUMBER()函数,指定多个字段查出重复保留一条,删除多余记录
    --创建需要删除重复数据的视图CREATEVIEWM_Tabs_GoodsStuff_view_DelASSELECTROW_NUMBER()OVER(PARTITIONBYGoodsID,ColorIDORDERBY(SELECT1))ASno,GoodsID,ColorIDFROMM_Tabs_GoodsStuff--删除多余的数据DELETEFROMM_Tabs_GoodsStuff_view_DelWHEREno!=......