巧用 git rebase 合并多个 commit。

一、为什么需要合并多个 commit 呢?

有时候,我们开发一个功能。

修修补补 commit 了很多次,过多的 commit 会显得很复杂。

不够直观,不能比较清晰查看那些 commit 是对应的那个功能。

所以,在这种情况下。我们需要整理一下 commit 的记录,让我们更好的管理提交记录。

二、具体合并多个 commit 的流程。

1、development 分支有四次 commit ,然后我准备合并 "add a.php" 和 "add b.php" 的两次 commit。

ps: 使用 git log 命令,查看 commit 记录。

2、然后执行命令:

$ git rebase -i d2bf14b495fe57583371be8d0a48c927a2da7eb9 7fc6da429881c5bca2705f61aac0e3a1a3c0b1c7

ps: 命令说明

// -i 的含义是:--interactive, 即弹出交互式的界面让用户编辑完成合并操作
// [startpoint] 指的是合并区间的起点。
// [endpoint] 指的是合并区间的终点,默认是当前分支 HEAD 所指向的 commit。 

$ git rebase -i [startpoint] [endpoint] 

// 注意:这里的区间是一个前开后闭的区间。

ps: Commands 说明,以下单字符命令为简写命令。

  • p, pick: 保留该 commit。
  • r, reword: 保留该 commit,可以修改 commit 的注释。
  • e, eidt: 保留该 commit,但停下来修改该 commit (不仅仅是注释),可以用来解决 merge 冲突。
  • s, squash: 将该 commit 和 前面一个 commit 合并。
  • f, fixup: 将该 commit 和 前面一个 commit 合并,但不保留该提交的注释信息。
  • x, exec: 执行 shell 命令。
  • d, drop: 丢弃该 commit。

3、然后,编辑 commit 内容。将 "pick" 改成 "squash" 或者 "s",意思是将该 commit (add b.php)和 前面的 commit (add a.php) 合并。编辑完成后,保存并退出(wq!)。

4、修改合并之后的 commit 注释。

5、编辑完合并 commit 的注释之后,就保存退出(:wq!)。

6、但是,在我们的一顿猛操作之后,我们进入了一个临时的分支(从 development 分支切出来的临时分支)。

7、那这个问题怎么解决呢?现在我们来基于这个临时分支,创建一个新的分支 feature/temp。

8、然后,我们再切回 development 分支,执行:git rebase feature/temp。

9、最后,看我们的 commit 记录,就已经把 "add a.php" 和 "add b.php" 的 commit 合并了。

三、总结。

  • 这次合并多个 commit,主要用到的命令是:git rebase -i [startpoint] [endpoint]。
  • 合并完成之后,会进入一个临时分支。需要在 development 分支上 rebase 这个临时分支。
  • 我们可以通过 git log 命令,查看提交的记录。

原文地址:https://www.cnblogs.com/yxhblogs/p/10527271.html

时间: 2024-10-06 03:12:15

巧用 git rebase 合并多个 commit。的相关文章

Git自动化合并多个Commit

目录 git rebase逻辑 git editor的修改 处理git-rebase-todo文件 Python实现 当我们有多个commit或者从开源处拿到多个commit时,想合成一个commit,并保留每个commit的message时,大家都知道用"git rebase -i"可以解决,但这种方式需要手动进行操作,假如我们要处理的比较多,就想要自动化来处理,下面介绍下怎么自动化处理. git rebase逻辑 当我们"git rebase -i"后,git在

git 使用 | 合并多个commit

我的需求: 在提交PR的时候,想把多个commit合并成一个commit. 解决: 首先在github中(或本地git log)查找到要合并的所有commit之前的commit的版本号: 例如: 如需合并红色commit及其之后的commit,需要获取的是蓝色的commit. 然后: git reset --soft 4972686f45acebe2d811810021a81822f7e39132 一定要加--soft哦 然后再进行commit: git commit -m "add one f

git第七节---git merge和git rebase

# git merge和git rebase 都可以进行分支合并 #git merge 合并后保留记录两个分支的记录 #git rebase合并后会展示成一个分支的记录,另一个分支的提交实际生成了一个副本 冲突解决 git merge在解决冲突后需要手动通过git add ,git commit 再生成一次提交 git rebase 在解决冲突后会自动生成一次提交 git merge 一次性会解决之前提交记录中的所有冲突 git rebase 一次只会解决一次提交上的冲突,如果多次提交都有冲突,

git rebase -i 合并commit

每次可能修改一个小的bug就会有一个提交,或者写了一小段代码就提交了一次. 这样经常会有多个commit,对此我们用git rebase -i HEAD~n来合并多个commit为一个commit. 如下图所示: 先用git status 查看下有多少个commit,下图中提示 Your branch is ahead of 'origin/master' by 2 commits. 很明显是2个commits待push. git log 里的内容请忽略掉. 现在用git rebase -i H

分布式版本控制系统Git-----7.Git 使用git rebase合并多次commit

将多次commit合并,只保留一次提交历史. PS:在我练习的时候,将一个文件的代码做了多次修改,而且每次修改都给提交了,这几次改动的目的都一样,比如说修改RADEME.md,但是每次改动的只是一个小小的代码,但是提交历史上的显示看着会很乱,所以需要合并之前的多次提交历史. 1.首先使用git log查看一下提交历史[--oneline作用是将每个提交放在一行显示] 这样在git中看到的是4次提交(更改txt),有点冗余,需要做的是将4次commit合并为一次 2. git 压缩  git re

git使用之rebase合并提交

git使用之rebase合并提交技术 maybe yes 发表于2015-03-15 22:43 原文链接 : http://blog.lmlphp.com/archives/88/The_use_tutorial_of_git_rebase_to_merge_multiple_commits_as_a_submit  来自 : LMLPHP后院 对于版本控制系统 GIT ,一直没有深入研究,只是从日常使用方面入手,能解决平常使用出现的问题就可以了.GIT 的版本控制,有三种后悔方式:reset

git代码合并:Merge、Rebase的选择

代码合并:Merge.Rebase的选择 Zhongyi Tong edited this page on Dec 7, 2015 · 3 revisions Pages 19 Home 2.1 快速指南 2.2 创建代码仓库 2.3 保存你的更改 2.4 检查仓库状态 2.5 检出之前的提交 2.6 回滚错误的修改 2.7 重写项目历史 3.2 保持同步 3.3 创建Pull Request 3.4 使用分支 3.5 常见工作流比较 4.1 图解Git命令 5.1 代码合并:Merge.Reb

Git合并多个Commit

当前有四个commit,现在要将四个commit合并为一个,可以使用git rebase -i HEAD~{这里是要合并的commit数量} 如 git rebase -i HEAD~4 ,即为合并最新的四个Commit,运行git reabse -i HEAD~4后,会出现如下界面 按照图中Commands中的提示操作,将commit b,c,d前面的pick改为s,这里我们将commit a前面的pick改为r,代表使用这个commit,并修改commit message 修改完后保存修改,

[Git] Rebase - 使用 Interactive 模式来精简 commit 纪录

避免过多 commit 纪录造成线图繁杂 透过 Rebase Interactive Mode?来将 commit log 进行精简 前言 在开发的过程中,会随着各种原因将代码提交至 local repository 中,并且在完成最终功能的开发后,会将 local 的变动 push 到 remote repository 中:此时为了避免过多无特别意义的 commit 纪录造成线图的繁杂,因此会透过各种方式来将 commit log 进行精简,其中处理方式多为 git reset 或 git