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'