Git 合并多次提交

在合并分支的时候,希望将多次提交合并成一个,然后再 cherry-pick 到主分支。

合并分支

develop 分支做开发,可能会进行多次提交,但是在发布或者进行 PR 的时候,我们只希望看到一次提交。这个时候,我们需要进行 git rebase 之后进行合并。

# HEAD~3 表示将近三次提交都合并,如果是将 2 次合并则为 HEAD~2
git rebase -i HEAD~3

这个时候,看到的是一上对 COMMIT 信息的提示

pick 9ba5122 2017 年 8 月 2 日
pick c6da035 ~~

# Rebase 9b6bae1..c6da035 onto 9b6bae1 (2 commands)
#
# 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
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

第一列对应的是 rebase 具体的操作,其含义如下

命令 作用
pick(p) git 会应用这个补丁,以同样的提交信息(commit message)保存提交
reword(r) git 会应用这个补丁,但需要重新编辑提交信息
edit(e) git 会应用这个补丁,但会因为 amending 而终止
squash(s) git 会应用这个补丁,但会与之前的提交合并
fixup(f) git 会应用这个补丁,但会丢掉提交日志
exec(x) git 会在 shell 中运行这个命令
drop(d) git 会移除这次 COMMIT

将第二个 pick c6da035 ~~~ 这一行修改成 squash c6da035 ~~~ ,使之与之前的提交合并。

保存之后可以看到下面的内容

This is a combination of 2 commits.
# This is the 1st commit message:

2017 年 8 月 2 日

删除无用配置,提高启动速度

1. 更新 zucchini-org
2. 增加 CHANGELOG 用来记录每次更新
3. 更新 plantuml 配置
   FIXED Can't find plantuml-jar-path
4. 增加 parinfer 配置,用来优化 lisp 的编写速度

# This is the commit message #2:

~~

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date:      Tue Aug 1 10:24:44 2017 +0800
#
# interactive rebase in progress; onto 9b6bae1
# Last commands done (2 commands done):
"~/spacemacs/spacemacs.d/.git/COMMIT_EDITMSG" 36L, 1003C

修改成正确的 commit 信息之后,保存存并退出,可以看到下面的内容

$ git rebase -i HEAD~2
[detached HEAD 0238691] 2017 年 8 月 2 日
 Date: Tue Aug 1 10:24:44 2017 +0800
 5 files changed, 65 insertions(+), 34 deletions(-)
 create mode 100644 CHANGELOG.org
 rewrite local/custom.el (66%)
Successfully rebased and updated refs/heads/develop.

这个时候,就已经将我们这几次的更改都合并到一次中了。

cherry-pick 分支并更新

这个时候,就可以更新我们的代码了。

首先 git checkout master 分支, 然后更新我们的代码 git pull

然后将我们合并之后的 develop 分支的内容更新过来

git log -b develop

看到如下内容

commit 02386914b9e5ab13c23451a3463813bfdecb157a
Author: 语乱 <[email protected]>
Date:   Tue Aug 1 10:24:44 2017 +0800

    2017 年 8 月 2 日

    删除无用配置,提高启动速度

    1. 更新 zucchini-org
    2. 增加 CHANGELOG 用来记录每次更新
    3. 更新 plantuml 配置
       FIXED Can't find plantuml-jar-path
    4. 增加 parinfer 配置,用来优化 lisp 的编写速度

或者使用上次的操作的中的提示 [detached HEAD 0238691] 2017 年 8 月 2 日 其中的 0238691 就是我们需要

git cherry-pick 0238691

这样我们再推送到远程就可以实现合并更新了。

原文地址:https://www.cnblogs.com/banshiliuli1990/p/12177450.html

时间: 2024-08-03 17:45:35

Git 合并多次提交的相关文章

合并多次提交 commits 到 新分支

合并某个分支上的单个commit 首先,用Git log或GitX工具查看一下你想选择哪些commits进行合并,例如: dd2e86 - 946992 -9143a9 - a6fd86 - 5a6057 [master] \ 76cada - 62ecb3 - b886a0 [feature] 比如,feature 分支上的commit 62ecb3 非常重要,它含有一个bug的修改,或其他人想访问的内容.无论什么原因,你现在只需要将62ecb3 合并到master,而不合并feature上的

使用git rebase合并多次commit

使用git rebase合并多次commit 1. 背景 一个repo通常是由一个team中的多个人共同维护,如果需要增加新feature,那么就是一个feature分支了.由于开发中各种修改,本feature分支多次commit.最后提交master后,会看到乱七八糟的所有增量修改历史.其实对别人来说,我们的改动应该就是增加或者删除,给别人看开发过程的增量反而太乱.于是我们可以将feature分支的提交合并后然后再merge到主干这样看起来就清爽多了. 记得知乎上有个帖子提问为啥vue的作者尤

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

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

git入门(4.提交与历史)

四.提交与历史 了解了文件的状态,我们对文件进行了必要的修改后,就要把我们所做的修改放入版本库了,这样以后我们就可以在需要的时候恢复到现在的版本,而要恢复到某一版,一般需要查看版本的历史. 提交 提交很简单,直接执行"git commit".执行git commit后会调用默认的或我们设置的编译器要我们填写提示说明,但是提交说明最好按GIT要求填写:第一行填简单说明,隔一行填写详细说明.因为第一行在一些情况下会被提取使用,比如查看简短提交历史或向别人提交补丁,所以字符数不应太多,40为

git log 查看提交历史

文章出处http://blog.csdn.net/wh_19910525/article/details/7468549  git log  查看 提交历史 在提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,可以使用 git log 命令查看. 接下来的例子会用我专门用于演示的 simplegit 项目,运行下面的命令获取该项目源代码: git clone git://github.com/schacon/simplegit-progit.git 然后在此项目中运行 git log,

git实战(3)--提交到本地仓库

上一节就提到了仓库的概念,其实初始化git后,git将本地空间分成两部分,一部分是工作区(Working Directory),studygit目录就是工作区存放我们自己的文件,另外一个就是版本库(Repository)也称为仓库,在工作区目录下有一个.git的隐藏目录,该目录不属于工作区,就是仓库. [email protected]$ ls -altotal 0drwxr-xr-x   3 houenxun  staff   102  7  9 19:18 .drwxr-xr-x+ 52 h

git log 查看提交记录,参数:

git log 查看提交记录,参数:-n (n是一个正整数),查看最近n次的提交信息 $ git log -2 查看最近2次的提交历史记录 -- fileName fileName为任意文件名,查看指定文件的提交信息.(注:文件名应该放到参数的最后位置,通常在前面加上--并用空格隔开表示是文件.) $ git log file1 file2 查看file1文件file2文件的提交记录$ git log file/ 查看file文件夹下所有文件的提交记录 --branchName branchNa

git log 查看提交记录

1. git log 查看提交历史记录 2. git log --oneline  或者 git log --pretty=oneline 以精简模式显示 3. git log --graph 以图形模式显示 4. git log --stat 显示文件更改列表 5. git log --author= 'name' 显示某个作者的日志 6. git log -p filepath 查看某个文件的详细修改 7. git log -L start,end:filepath 查看某个文件某几行范围内

git防止每次提交输入用户名与密码的方法(http方式 而不是 ssh方式)

windows下比较比较好用的git客户端有2种: 1. msysgit + TortoiseGit(乌龟git) 2. GitHub for Windows github的windows版也用过一段时间,但还是不太习惯.所以目前仍然青睐与msysgit+乌龟git的组合.TortoiseGit在提交时总数会提示你输入用户名密码,非常麻烦.解决方案如下: 方法一: 设置 -> git 编辑本地 .git/config 增加 1[credential] 2 helper = store保存,输入一