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.