常用选项
用于分支合并。
| 选项 | 含义 |
|---|---|
| --abort | 放弃合并 |
| -Xignore-all-space | 忽略任意 数量 的已有空白的修改 |
| -Xignore-space-change | 忽略所有空白修改 |
| -Xours 或 -Xtheirs | 遇冲突时处理策略 |
冲突
-
暂存区中会记录合并时如果发生冲突的文件。第一行为两个结点的共同祖先结点;第二行为本地结点;第三个为将要并入的结点。假设合并时 a.txt 发生冲突,则暂存区中内容如下:
$ git ls-files --stage 100644 3e2f7e01b38f14f5581736aaec9e64f9e0774b51 1 a.txt 100644 95ead9e78b940a3e931bc2049907062ca51dfa1c 2 a.txt 100644 04da786ebb974bde147bd7678c4dce35a866220c 3 a.txt第一个为共同祖先的 sha1 值;第二个为本地 sha1 值;第三个为要并入的分支中 a.txt 文件的 sha1 值。
合并时使用
-Xours 或 -Xtheirs,那么在遇到冲突文件时,会保留当前分支修改(-Xours)或保留被合并分支的修改。
revert
撤销某次操作,并且把这次撤销作为一次最新的提交。
如对当前结点 HEAD 进行 revert :
$ git revert HEAD
$ git diff HEAD~2 HEAD
$
可以看出:revert 后,当前结点与其祖父结点没有任何不同。
在 diff 命令中的 HEAD 与 revert 中的 HEAD 指向的结点并不相同,后者是前者的父结点。因为撤销操作之后,会重新生成一个新结点,该结点的父结点就是执行撤销的结点。
与 reset 区别
reset 通过移动分支指向的结点,改变分支。
revert 通过还原指定的结点,并将还原的的内容重新创建一个新结点,使分支指向新结点。