16.2.2 修改相同文件的不同区域
当用户user1和user2在本地提交中修改相同的文件,但是修改的是文件的不同位置时,则两个用户的提交仍可成功合并,具体操作过程如下。
(1)为确保两个用户的本地版本库和共享版本库状态一致,先分别对两个用户的本地版本库执行拉回操作。
$git pull
(2)用户user1在自己的工作区中修改README文件,在文件的第一行插入内容,更改后的文件内容如下。
User1 hacked. Hello.
(3)用户user1对修改进行本地提交并推送到共享版本库。
$git add-u $git commit-m "User1 hack at the beginning." $git push
(4)用户user2在自己的工作区中修改README文件,在文件的最后插入内容,更改后的文件内容如下。
Hello. User2 hacked.
(5)用户user2对修改进行本地提交。
$git add-u $git commit-m "User2 hack at the end."
(6)用户user2执行获取(git fetch)操作。获取到的提交更新到本地用于跟踪共享版本库master分支的本地引用origin/master中。
$git fetch remote:Counting objects:5,done. remote:Compressing objects:100%(2/2),done. remote:Total 3(delta 0),reused 0(delta 0) Unpacking objects:100%(3/3),done. From file:///path/to/repos/shared 0855b86..07e9d08 master->origin/master
(7)用户user2执行合并操作,完成自动合并。
$git merge refs/remotes/origin/master Auto-merging README Merge made by recursive. README|1+ 1 files changed,1 insertions(+),0 deletions(-)
(8)用户user2推送合并后的本地版本库到共享版本库。
$git push Counting objects:10,done. Delta compression using up to 2 threads. Compressing objects:100%(4/4),done. Writing objects:100%(6/6),607 bytes,done. Total 6(delta 0),reused 3(delta 0) Unpacking objects:100%(6/6),done. To file:///path/to/repos/shared.git 07e9d08..2a67e6f master->master
(9)如果追溯一下README文件每一行的来源,可以看到分别是user1和user2更改的最前和最后的一行。
$git blame README 07e9d082(user1 2010-12-25 23:12:17+0800 1)User1 hacked. ^5174bf3(user1 2010-12-19 15:52:29+0800 2)Hello. bb0c74fa(user2 2010-12-25 23:14:27+0800 3)User2 hacked.
