【发布时间】:2017-09-04 21:01:58
【问题描述】:
我有两个分支 dev 和 a。我需要将功能a 合并到dev,但我的队友在一个文件中制作了某些功能,这些功能还没有准备好合并。如果我只是使用我的合并和解析,git 会将这个文件中的更改标记为无效,而不是允许这些更改在以后合并,如果我尝试重新合并分支,只需快进。如果我不解决冲突,git 会拒绝执行合并。
我解决此问题的策略是在旁边创建一个分支并抑制损坏的功能,然后在此分支中合并。问题是执行此操作的 git 命令有些复杂,所以我需要专家的帮助。
如果可能的话,我希望将这种类型的操作概括为一个 git 扩展,我会调用 git-cherrymerge 的效果。
步骤如下:
- 将用户指定的提交(也许这可以通过某种策略自动化)重放到临时分支上
- Git filter-branch 删除损坏的文件
- Squash 临时分支,添加自动提交消息
- 将临时分支合并到目标分支(这里是 dev)
我不是filter-branch 或rebase 方面的专家,看起来我可以非常严重地通过滥用它们来破坏历史。
我想我的问题是
- 这会起作用还是有更好的规范方法来做到这一点?
- 我应该按什么顺序执行哪些 git 命令以避免意外损坏我的存储库历史记录。
【问题讨论】:
-
"git 将此文件中的更改标记为无效" 你是什么意思“无效”?你的意思是有冲突吗?
-
@Schwern 基本上,如果我尝试再次向上游合并,那么早期历史中存在的那些更改被认为是“坏的”,并且永远不会被自动合并策略“应用” .
-
不是“坏”或“无效”。你已经告诉 git 你已经合并了这些文件并通过告诉它如何应用更改来处理合并,你忽略了它们。 Git 稍后不会重试该合并,因为该提交已被合并。最好的办法是在执行合并之前处理这个问题,将工作分成两个不同的分支,一个可以合并,一个不能合并。
-
嗯,是的,但是由于没有更好的词,我告诉 git 不要在将来保留它们,所以基本上整个问题是如何处理这种情况,因为 git 范式没有t 有一个部分合并的概念,除了是的,在合并之前弄清楚它。
标签: git version-control merge git-filter-branch cherry-pick