乐趣区

关于git:合并分支遇到文件冲突ourstheirs-的具体指向

在应用 mergerebase 对不同分支进行整合时,如果对同一个文件的同一个局部进行了不同的批改,就会遇到文件抵触。

git checkout 命令能够应用 --ours--theirs 选项,这是一种无需合并的疾速形式,能够抉择留下一边的批改而抛弃掉另一边批改。

这里次要阐明在应用 git checkout --ours 或者 git checkout --theirs 时,--ours(--theirs) 的具体指向是什么。


事后假如 git 仓库有分支 dev,在快照 C1 处新建分支 fix
分支 fix 相继提交了 C2、C3 快照;
分支 dev 提交了 C4 快照。

应用 merge 遇到抵触

切换到 dev 分支。

应用 git merge 命令将分支 fix 合并到分支 dev,两条分支都对文件 file1 的同一个局部做了不同的批改;此时,会呈现合并抵触。

假如咱们须要保留 dev 分支上对 file1 的变更,放弃 fix 分支的变更,能够应用:

git checkout --ours

--ours,此时示意的是 dev 分支的变更。


假如咱们须要保留 fix 分支上对 file1 的变更,放弃 dev 分支的变更,能够应用:

git checkout --theirs

--theirs,此时示意的是 fix 分支的变更。

应用 rebase 遇到抵触

同样的前提,应用 rebase 对分支进行解决,将 dev 分支作为指标基底分支,将分支 fix 合并到分支 dev

假如咱们须要保留 dev 分支上对 file1 的变更,放弃 fix 分支的变更,能够应用:

git checkout --theirs

--theirs,此时示意的是 dev 分支的变更。


假如咱们须要保留 fix 分支上对 file1 的变更,放弃 dev 分支的变更,能够应用:

git checkout --ours

--ours,此时示意的是 fix 分支的变更。


应用 rebase 时,--ours(--theirs) 的指向反直觉

可能和 rebase 的实现无关。

应用 rebase,将 fix 分支合并到 dev 分支:

git checkout fix
git rebase dev

分支 fix 是以后分支,dev 是变基操作的指标基底分支。

执行时,会先找到这两个分支(fixdev)的最近独特先人 C1,而后比照以后分支 fix 绝对该先人的历次提交(C2、C3 快照),提取相应的批改并存为临时文件,而后将以后分支指向指标基底 C4,最初将之前另存为临时文件的批改顺次利用为 C2’、C3’。

如果文件 file1 呈现合并抵触,--ours 指的是以后分支 fix 的批改;--theirs 指的是指标基底 dev 的批改。

退出移动版