首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有正确的方法将两个不符合顺序的提交组合在一起?

是否有正确的方法将两个不符合顺序的提交组合在一起?
EN

Stack Overflow用户
提问于 2016-09-22 20:24:16
回答 2查看 205关注 0票数 5

我想将两个不符合顺序的提交合并为一个。

例如,如果我执行命令git rebase -i HEAD~3

代码语言:javascript
复制
pick 8h47n1f Update documentation and release-notes  #a
pick 8n32b7a Implemented some random function        #b
pick a73ncj1 Update documentation and release-notes  #c

在推送之前,我希望将a和c行合并为一次提交。

我目前完成此操作的方法是按以下方式重新排序提交:

代码语言:javascript
复制
pick 8h47n1f Update documentation and release-notes   #a
squash a73ncj1 Update documentation and release-notes #c
pick 8n32b7a Implemented some random function         #b

到目前为止,我还没有看到任何危险的副作用。有人知道我这样做真的能打破什么吗?有没有更好、更安全的方法来完成我想要完成的任务?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-22 21:06:27

这是实现这一目标的最佳途径(也是afaik的唯一途径)。您不能做任何不能被恢复的事情(例如,您总是可以根据冲突中止重基进程)。

票数 3
EN

Stack Overflow用户

发布于 2016-09-22 21:40:41

从简单的角度来看,交互式重基(git rebase -i)提供的列表只是一个自动执行樱桃选择的脚本。列表是完全可编辑的,您甚至可以删除所有内容,并编写一个全新的、完全不同的列表。Git将只签出基本提交,然后按照顺序执行列表命令。

有一种方法可以自动重新排序列表中的提交:使用autosquash。来自git-rebase文档:

当提交日志消息以"squash!…​“(或"fixup!…​”)开头时,而提交的标题以相同的…开头时-i,自动修改重基pick的todo列表,使标记为挤压的提交在要修改的提交之后立即出现,并将移动提交的操作从pick更改为squash (或fixup)。忽略随后的“修正!”或者“南瓜!”在第一个版本之后,万一您引用了前面使用git commit --fixup/--squash进行的修复/压缩。 只有在使用--interactive选项时,此选项才有效。 如果默认情况下使用配置变量rebase.autoSquash启用了--autosquash选项,则可以使用此选项覆盖和禁用此设置。

在您的示例中,在创建提交c++时,使用git commit --squash <commit-a> (如果提交已经存在,也可以使用--amend )。当git rebase -i发布时(假设您设置了rebase.autoSquash),列表将按您的需要显示。

关于交互式重基的唯一问题是当组合-p-i选项时。同样,在git-rebase文档中,在Bugs部分中:

--preserve-merges --interactive提供的待办事项列表并不表示修订图的拓扑结构。编辑提交和重新措辞提交消息应该可以正常工作,但是重新排序提交的尝试往往会产生违反直觉的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39648255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档