让git为分支之间的差异引发合并冲突
我有一个github分支,它有大量不在主分支上的更改。当我尝试将变更分支合并到主分支中时,git会自动合并大量内容,并在添加内容直接集成到现有html或javascript的实例中引发冲突 我希望git为两个分支之间存在差异的所有实例引发合并冲突,这样我就可以检查并批准每个添加 我尝试了“我们的”策略,但这只是一个强制合并,将所有传入的更改与我所知道的保持一致 在合并两个分支时,是否有一种方法可以触发两个分支之间所有差异的合并冲突?或者一个类似的函数,它将以一种谨慎的方式促进这些分支的组合?我知道使用git diff,但我希望存在一些更像解决合并冲突时发生的事情 在合并两个分支时,是否有一种方法可以触发两个分支之间所有差异的合并冲突 不是。问题实际上在于让git为分支之间的差异引发合并冲突,git,github,merge,Git,Github,Merge,我有一个github分支,它有大量不在主分支上的更改。当我尝试将变更分支合并到主分支中时,git会自动合并大量内容,并在添加内容直接集成到现有html或javascript的实例中引发冲突 我希望git为两个分支之间存在差异的所有实例引发合并冲突,这样我就可以检查并批准每个添加 我尝试了“我们的”策略,但这只是一个强制合并,将所有传入的更改与我所知道的保持一致 在合并两个分支时,是否有一种方法可以触发两个分支之间所有差异的合并冲突?或者一个类似的函数,它将以一种谨慎的方式促进这些分支的组合?我知
git读取树
(以及git merge
使用的实现它的C代码)。阅读树只是说:
- 索引槽1(合并基)中的提交具有哈希Hbase
- 索引槽2中的提交(
)具有哈希小时数--ours
- 索引槽3
)中的提交具有散列htheir(-theres
- 如果三个散列都匹配,使用任意一个副本,我们就完成了
- 如果Hbase=hthers,使用我们的复制时间,我们就完成了
- 如果Hbase=Hours,使用他们的副本hthers,我们就完成了
- 这三种方法都不同:进行低级合并
- “完成”是指:丢弃暂存插槽1-3;将所选哈希ID写入插槽0
git merge--no commit
,然后对每个索引项使用git ls files--stage
,将staging slot zero中的哈希ID与合并基树中的哈希ID进行比较。即:
git merge base--all
查找合并基提交散列ID。如果有两个或更多,停下来寻求帮助,因为现在问题很难解决。否则,将此散列ID保存为合并基散列ID。在任何情况下,您现在也可以获取其他两个散列ID(git rev parse HEAD
获取我们的散列ID,而git rev parse merge argument
获取它们的散列ID)git-read-tree
填充合并基中的文件。(如果这使编码器更简单,您可以推迟这一步,这可能会实现。)git merge
,但添加——no commit
。考虑检查退出状态,因为0意味着“GIT认为一切顺利”,非零意味着“出错”——包括合并冲突,但即使GIT认为事情出错,您也可能要继续进行。git merge
认为已成功合并的每个文件都位于暂存槽0中。git merge
认为无法成功合并的每个文件在插槽1、2和/或3中都有一个或多个条目gitls文件--stage
并适当设置git\u index\u文件
环境变量)。对于此索引中的所有文件,如果更新后的主索引中的对应文件位于插槽0处,但具有不同的哈希ID,则意味着Git从--ours
或--theres
提交中获取该文件Git update index--index info
将合并基础、我们的文件和他们的文件放入插槽1、2和3中,而Git认为合并失败的文件是单独的(或者更新它们,但更新将不起作用)。注意仅在部分(而不是全部)3次提交中的文件:它们的暂存槽应为零,以指示该文件在该版本中不存在--ours
或--theres
中添加了一个新文件,而不是在另一个提交中添加,则该文件也将位于插槽0中,而不在数据库中
不过,以上六个步骤通常会产生您想要的结果:成功合并的文件将被视为“冲突”,合并工具将看到所有三个输入。您不会在文件的工作树副本中看到任何冲突标记,但您会知道哪些文件是哪些,因为git status
会将它们称为未合并
我想要的是[…通过并批准每一项添加
Git的automerge是为了省去这一点而构建的,但是如果您不想使用它,您可以关闭它并通过另一种方法应用个别差异
git merge --no-commit -s ours thatbranch
git checkout -p thatbranch -- .
这将提示您当前分支机构与
该分支机构
上的内容之间的任何差异,并获得您想要的“批准每项添加”<代码>git提交当合并结果符合您的要求时。您可以执行类似于git checkout mainbranch&&git reset new branch的操作<