博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在Git中合并特定的提交
阅读量:3576 次
发布时间:2019-05-20

本文共 1919 字,大约阅读时间需要 6 分钟。

我已经从Hub的存储库中分支了一个分支,并提交了一些特定于我的东西。 现在我发现原始存储库具有HEAD的良好功能。

我只想合并它而无需先前的提交。 我该怎么办? 我知道如何合并所有提交:

git branch -b a-good-featuregit pull repository mastergit checkout mastergit  a-good-featuregit commit -agit push

#1楼

让我们尝试举一个例子来理解:

我有一个分支,例如master ,指向X <commit-id>,还有一个新分支,指向Y <sha1>。

其中Y <commit-id> = <master>分支提交-很少提交

现在说,对于Y分支,我必须关闭master分支和新分支之间的提交。 下面是我们可以遵循的过程:

步骤1:

git checkout -b local origin/new

其中本地是分支名称。 可以给出任何名称。

第2步:

git merge origin/master --no-ff --stat -v --log=300

将提交从master分支合并到新分支,还创建一个日志消息的合并提交,其中最多包含正在合并的<n>个实际提交中的单行描述。

有关Git合并的更多信息和参数,请参考:

git merge --help

另外,如果您需要合并特定的提交,则可以使用:

git cherry-pick 

#2楼

在我的用例中,我们对CI CD也有类似的需求。 我们在开发和主分支中使用了git flow。 开发人员可以自由地直接合并那里的更改以进行开发,也可以通过功能分支的拉取请求进行合并。 但是要掌握,我们只能通过Jenkins以自动化的方式合并来自developer分支的稳定提交。

在这种情况下,摘樱桃不是一个好选择。 但是,我们从commit-id创建一个本地分支,然后将该本地分支合并到master并执行mvn clean verify(我们使用maven)。 如果成功,则使用带有localCheckout = true选项和pushChanges = false的maven发布插件将生产版本工件发布到联系。 最终,当一切都成功时,则将更改推送到源代码。

示例代码段:

如果您手动完成,则假设您处于主状态。 但是在詹金斯上,当您签出仓库时,您将位于默认分支(如果已配置,则为master)。

git pull  // Just to pull any changes.git branch local-
// Create a branch from the given commit-idgit merge local-
// Merge that local branch to master.mvn clean verify // Verify if the code is build ablemvn
release:clean release:prepare release:perform // Release artifactsgit push origin/master // Push the local changes performed above to origin.git push origin
// Push the tag to origin

这将为您提供完全控制,而无畏合并或冲突地狱。

如果有更好的选择,请随时提出建议。


#3楼

' '应该是您的答案。

应用现有提交引入的更改。

在这篇文章中,不要忘记阅读关于樱桃采摘的答案:

,其中:

A-----B------C \  \   D

变成:

A-----B------C \  \   D-----C'

提交的问题是git认为提交包含所有历史记录

其中C'具有不同的SHA-1 ID。

同样,樱桃从一个分支到另一个分支挑选一个提交基本上涉及生成补丁,然后应用它,从而也失去了历史记录。

提交ID的这种更改在其他方面破坏了git的合并功能(尽管如果谨慎使用,则会在此基础上进行启发式尝试)。

不过,更重要的是, 它忽略了功能依赖性-如果C实际上使用了B中定义的功能,您将永远不会知道


#4楼

您可以使用git cherry-pick单独将单个提交应用于当前分支。

示例: git cherry-pick d42c389f

转载地址:http://iaogj.baihongyu.com/

你可能感兴趣的文章
设计模式七大原则
查看>>
SpringBoot入门(二)场景启动器
查看>>
SpringBoot入门--自动配置
查看>>
自动配置原理
查看>>
TCP协议
查看>>
关于Linux系统使用遇到的问题-1:vi 打开只读(readonly)文件如何退出保存?
查看>>
spring注解版(一)
查看>>
SpringBoot中访问控制层(controller)得不到Json数据
查看>>
BFC(Block Formatting Context)
查看>>
什么是作用域,什么是闭包,什么是作用域链
查看>>
惰性求值,面向对象
查看>>
数据结构之列表
查看>>
es5中的arguments对象
查看>>
git本地仓库和远程仓库关联,分支重命名
查看>>
js对象的深拷贝,你真的觉得很简单吗?
查看>>
你真的了解map方法吗?手动实现数组map方法。
查看>>
带你手动实现call方法,让你收获满满
查看>>
前端知识体系
查看>>
使用join查询方式找出没有分类的电影id以及名称
查看>>
Qt教程(2) : Qt元对象系统
查看>>