在应用 merge
或 rebase
对不同分支进行整合时,如果对同一个文件的同一个局部进行了不同的批改,就会遇到文件抵触。
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
是变基操作的指标基底分支。
执行时,会先找到这两个分支(fix
和 dev
)的最近独特先人 C1,而后比照以后分支 fix
绝对该先人的历次提交(C2、C3 快照),提取相应的批改并存为临时文件,而后将以后分支指向指标基底 C4,最初将之前另存为临时文件的批改顺次利用为 C2’、C3’。
如果文件 file1
呈现合并抵触,--ours
指的是以后分支 fix
的批改;--theirs
指的是指标基底 dev
的批改。