8.2 挽救分离头指针

在“分离头指针”模式下进行的测试提交除了使用提交ID(acc2f69)访问之外,不能通过master分支或其他引用访问到。如果这个提交是master分支所需要的,那么该如何处理呢?如果使用上一章介绍的git reset命令,的确可以将master分支重置到该测试提交"acc2f69",但是如果那样就会丢掉master分支原先的提交"4902dc3"。使用合并操作(git merge)可以实现两者的兼顾。

下面的操作会将提交"acc2f69"合并到master分支中来,具体操作过程如下。

(1)确认当前处于master分支。


$git branch-v

*master 4902dc3 does master follow this new commit?


(2)执行合并操作,将acc2f69提交合并到当前分支。


$git merge acc2f69

Merge made by recursive.

0 files changed.0 insertions(+).0 deletions(-)

create mode 100644 detached-commit.txt


(3)工作区中多了一个detached-commit.txt文件。


$ls

detached-commit.txt new-commit.txt welcome.txt


(4)查看日志,会看到不一样的分支图。即在e695606提交开始出现了开发分支,而分支在最新的2b31c19提交发生了合并。


$git log—graph—pretty=oneline

*2b31c199d5b81099d2ecd91619027ab63e8974ef Merge commit 'acc2f69'

|\

|*acc2f69cf6f0ae346732382c819080df75bb2191 commit in detached HEAD mode.

*|4902dc375672fbf52a226e0354100b75d4fe31e3 does master follow this new commit?

|/

*e695606fc5e31b2ff9038a48a3d363f4c21a3d86 which version checked in?

*a0c641e92b10d8bcca1ed1bf84ca80340fdefee6 who does commit?

*9e8a761ff9dd343a1380032884f488a2422c495a initialized.


(5)仔细看看最新提交,会看到这个提交有两个父提交。这就是合并的奥秘。


$git cat-file-p HEAD

tree ab676f92936000457b01507e04f4058e855d4df0

parent 4902dc375672fbf52a226e0354100b75d4fe31e3

parent acc2f69cf6f0ae346732382c819080df75bb2191

author Jiang Xin<jiangxin@ossxp.com>1291535485+0800

committer Jiang Xin<jiangxin@ossxp.com>1291535485+0800

Merge commit 'acc2f69'