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.