从分支中提取所有提交,将指定的提交推送到另一个提交
我有以下分支机构:
master
production
和以下远程分支机构:
origin/master
origin/production
我有一个脚本可以获取origin/master
分支,并获取从最后一次获取( log -p master..origin/master
)更改的内容。 然后我合并origin/master
。
发现的提交被推送到代码审查工具。
我想把成功的承诺 - 只有他们 - 推到生产部门,当然还有origin/production
。
我该怎么做?
另外,我还运行了2个脚本:从origin/master
获取的脚本,push将细节提交到数据库并合并,另一个我正在编写的脚本将推动成功的提交。
我想让这两个脚本运行,同时避免竞争条件/合并冲突。 由于我只想使用指定的提交,也许有办法摆脱我不想要的提交?
我认为你正在寻找的术语是“樱桃树”。 也就是说,从一个分支的中间进行一次提交并将其添加到另一个分支:
A-----B------C
D
变
A-----B------C
D-----C'
这当然可以用git cherry-pick命令来完成。
这个提交的问题在于git认为提交包含所有历史记录 - 因此,如果您有三次提交,如下所示:
A-----B-----C
并尝试摆脱B,你必须创建一个全新的提交,如下所示:
A-----------C'
其中C'具有不同的SHA-1 ID。 同样,樱桃挑选从一个分支到另一个分支的提交基本上涉及生成一个补丁,然后应用它,从而以这种方式丢失历史。
提交ID的这种改变会破坏git的合并功能(尽管如果使用的话会有启发式方法,但会对此进行讨论)。 更重要的是,它忽略了函数依赖关系 - 如果C实际使用了B中定义的函数,那么您永远不会知道。
也许一个更好的方法来处理这个问题将是更细粒度的分支。 也就是说,不是只有'主',而是'featureA','bugfixB'等。对整个分支执行代码审查 - 每个分支都非常专注于做一件事 - 然后合并一个分支,当你完成。 这是git所设计的工作流程,以及它的优点:)
如果你坚持要在补丁级别处理事情,你可能需要看看darcs--它认为库是一套补丁,因此樱桃采摘成为基本操作。 然而,这有它自己的问题,如很慢:)
编辑:另外,我不确定我理解你的第二个问题,关于这两个脚本。 也许你可以更详细地描述它,可能作为一个单独的问题,以防止令人困惑?
我意识到这是一个古老的问题,但在这里引用:如何合并Git中的特定提交
因此,一个更新的答案:使用功能分支和拉请求。
这看起来像什么,其中fA是提交功能A,而fB是提交功能B:
fA fC (bad commit, don't merge)
/ /
master ----A----B----C
/
fB
Pull请求与GitHub的功能相关联,但我的意思是,有人有责任将功能分支合并到主服务器中。
链接地址: http://www.djcxy.com/p/46965.html上一篇: Pull all commits from a branch, push specified commits to another