0


git如何将多个提交合并为一个提交

第一种:使用git rebase命令

使用以下命令的其中一种启动交互式 rebase

git rebase -i 你想要合并提交的父提交的哈希值

git rebase -i <commit-hash>^  
(^ 符号用于指定该提交的父提交,即你想要从这个父提交之后的所有提交开始 rebase)

git rebase -i HEAD~n
(n表示要合并的提交个数)

比如你进行了五次提交

C1 => C2 => C3 => C4 => C5

现在你想把最新的C3、C4和C5这3个提交合并为一个提交,最终提交历史像下面这样

C1 => C2 => C345

则你可以用以下三种命令中的一种

git rebase -i C2的CommitID

git rebase -i C3的CommitID^

git rebase -i HEAD~3

交互式 rebase 会打开一个文本编辑器(如 vim),列出你想要重新应用的提交,大概像下面这样。

pick   C3的CommitID    C3的提交信息
pick   C4的CommitID    C4的提交信息
pick   C5的CommitID    C5的提交信息

# 某注释内容
# 某注释内容
# 某注释内容
# 某注释内容
# 某注释内容

你可以通过以下方式合并提交:

  • 将你想要合并的提交前面的 pick 改为 fixup 或 squash(两者都用于合并提交,但 squash 会保留合并提交的日志消息,而 fixup 会丢弃它,只保留第一个提交的日志消息)。
  • 你可以将除了第一个提交之外的所有提交都改为 fixup 或 squash,以将它们合并到第一个提交中。

比如你想把C3、C4和C5这3个提交合并为一个提交,且提交信息用C3的提交信息,则可以将温变编辑为像下面这样

pick   C3的CommitID    C3的提交信息
fixup   C4的CommitID    C4的提交信息
fixup   C5的CommitID    C5的提交信息

# 某注释内容
# 某注释内容
# 某注释内容
# 某注释内容
# 某注释内容

然后保存你的更改并关闭编辑器。Git 将根据你的指示重新应用提交。

如果 rebase 过程中出现冲突,Git 会暂停 rebase 并让你解决冲突。解决冲突后,使用 git add 来标记冲突已解决,并使用 git rebase --continue 来继续 rebase 过程。

如果 rebase 成功完成,你的提交历史就会更新,多个提交会被合并为一个提交。你可以使用 git log 来查看新的提交历史。

第一种方法讲解完毕。



第二种:使用git reset命令 + 重新提交

首先使用git log查看提交历史,比如结果像下面这样

提交5 CommitHash5
      提交5信息

提交4 CommitHash4
      提交4信息

提交3 CommitHash3
      提交3信息

提交2 CommitHash2
      提交2信息

提交1 CommitHash1
      提交1信息

如果你想把提交5、提交4、提交3合并为一个提交,你可以先将版本回退到提交且在回退时保留工作区的变动,使用以下命令:

git reset CommitHash2

这条命令会将版本回退到提交2,这可以通过git log命令可以查看到。同时工作区内容仍为提交5版本的内容。

然后通过git status命令可以看到提交2到提交5之间的变动情况

然后你可以通过git add和git commit来生成一个提交,这样你就将提交5、提交4、提交3合并为了一个提交。

第二种方法讲解完毕。



对于上面这种操作,你的提交历史就变成了提交1 => 提交2 => 由345合并的那个提交。

但是有时,远端分支版本比较落后,而本地分支版本较新,远端分支版本到本地分支版本之间有多个提交,你想把这多个提交合并为一个提交。可以先将本地分支回退到远程分支一样的版本同时保留工作区的变动,使用以下命令:

git fetch origin

git reset origin/远端分支名称

# 这里origin是远端仓库的别名

然后和刚才一样,你可以通过git add和git commit来生成一个提交,这样你就将远端分支版本到本地分支版本之间的多个提交合并为了一个提交。



end

标签: git

本文转载自: https://blog.csdn.net/hutaotaotao/article/details/141441313
版权归原作者 hutaotaotao 所有, 如有侵权,请联系我们删除。

“git如何将多个提交合并为一个提交”的评论:

还没有评论