Author: haoransun
Wechat: SHR—97
图片来源:极客时间,需个人购买教程。
1.不同人修改不同文件如何处理
JavaSsun用户修改 readme文件
haoran用户修改index文件
远端仓库新建一个名字为 feature/add_git_commands的分支
为了在单机模拟两个人做操作,需要从远端克隆一个 命名为 git_learning_02 以 JavaSsun为用户的仓库
再变更email
基于远端刚才新建的分支在本地新建一个分支,并切换到该分支上(二者联系起来)
JavaSsun在git_learning_02仓库中修改readme文件,commit后 推送到远端仓库。
1 | git push 即可(为什么不用加分支名了呢,因为上面命令中本地分支与远端分支做了关联) |
远端仓库也有了最新的变更
至此,JavaSsun开发人员修改完了readme,并提交到了远程仓库。
切换到haoran所属的git_learning 仓库,查看后发现没有 feature/add_git_commands分支,需要拉取下来。
1 | git branch -av |
将本地新建分支并与远端的分支做关联(名字最好一致,并查看hash值后发现确实是一致的)
1 | git checkout -b feature/add_git_commands github/feature/add_git_commands |
Hash值都是 27582a7
haoran用户修改index文件,commit完成。
JavaSsun用户又修改了readme文件,并且push到远程。
此时,haoran用户push自己的index文件到远端,会报错,如下图:
如何解决呢?
1 | git fetch github 尝试拉取远端的最新变更 |
发现有一个是 ahead 1 , behind 1 即本地比远端多一个,远端也比本地多一个。
如果团队不要求用线性树的模式的话,可以用merge 与远端的进行合并
1 | git merge github/feature/add_git_commands |
查看readme文件,发现将JavaSsun用户提交的内容都合了进来。
此时在使用 git push github 就不会报错
2.不同人修改同文件不同区域如何处理
开发之前都需要将自己的分支与远端做一次同
1 | git pull |
haoran: 对index.html文件做了变更,并做了commit
JavaSsun: 对index.html文件做了变更,并做了commit
haoran用户将自己的变更推送到了远端。此时 JavaSsun用户并不知道远端发生了新变更,也想推送自己的变更,自然就被拒绝。
1 | git fetch |
出现比远端做一个commit,同时比远端少一个commit,做merge即可。
1 | git branch -av |
默认缺省即可,查看发现有了其他人添加的内容。
3.不同人修改同文件同一区域如何处理
工作区先进行同步:
1 | git pull |
都对index.html文件的同一区域做了相同的变更,JavaSsun用户将自己的变更推送到了远端,haoran用户想推送自己的变更时被拒绝了。
1 | 如果用 merge 直接与远端进行合并,又发现 Already up to date,但又push不上去。 |
此时,需要用 git pull 命令,出现了冲突(需手动解决)
1 | vim index.html |
<<<<<HEAD 到 ===========是自己的变更
=========到>>>>>>>是别人的变更
留下双方都需要的变更
使用 git status 出现提示信息
git commit 保留二者的变更。 **
**git merge –abort 不想让这两个分支merge,恢复到merge之前的状态。
1 | git push github 推送即可 |
4.同时变更了文件名和文件内容如何处理
A变更了文件名,B变更了文件内容,但还是按照原来的文件名推送。
haoran用户
1 | git mv index.html index.htm |
JavaSsun用户
1 | vim index.html |
5.同一文件改成了不同的文件名如何处理
haoran用户
1 | git mv index.htm index2.html |
JavaSsun用户
1 | git mv index.htm index1.html |
查看状态,需要协作者一起协商文件名的选取
如果选择 index1.htm这个名字,需要按以下命令更改
1 | git status |
远端的已经变成了index1.htm