在使用 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
的修改。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
讲解大致内容为初始化列表,explicit关键字,static(静态)成员 目录 初始化列表与函数构造体赋值 函数构造体赋值 初始化列表 使用初始化列表的初始化顺序 使用初始化列表的优点 explicit关键字 static成员(静态) 概念 初始化列表与函…