GitHub 上我们可以 fork 别人的项目,为了与别人产生一种协作关系,将他人的项目在自己本地创建也一个,这里以霍格沃兹测试学院(Hogwarts)的演练环境做演示:

1.1) 点击fork按钮对项目进行fork:

1.2)fork完成后就可以在我们自己的gitHub账户下见到被fork的项目:

2.1)接着我们使用git clone命令将fork的项目clone到本地:

这个时候可以将此项目看做是自己的一个项目,可以任意修改;

2.2)项目的作者可以看到有哪些人fork了自己的项目:

git的安装与使用超详细版教程(Git实战三)(1)

3.1) 先在本地修改README.md文件为:

# Hogwarts_Online2 霍格沃兹测试学院定向班第二期演练 try it

3.2)将文件提交到本地仓库:

git的安装与使用超详细版教程(Git实战三)(2)

这个时候可以看到提交的作者已经变成我们自己了;也可以使用git remote -v命令来查看,可见现在本地仓库与远程仓库直接关联的是fork之后的项目:

git的安装与使用超详细版教程(Git实战三)(3)

3.3)只用git push命令将本地仓库的文件推到远程仓库中去:

git的安装与使用超详细版教程(Git实战三)(4)

如下图可以看到已经成功将修改后的README.md文件推到了GitHub上:

pr:全称 pull request,当我们修改了 fork 后的项目后,因为不能直接修改别人的项目,这个时候想要将自己的修改与原项目合并,就可以使用 pr 来向原项目作者进行申请

4.1)发起 pr,点击 New pull request:

然后我们可以看到仓库路径从我的仓库向原作者项目仓库地址发起 pr 请求,在下面可以看到我对项目的修改 diff:

4.2)这个时候我们点击Create new pull request按钮,填写描述后再点击Create new pull request按钮:

git的安装与使用超详细版教程(Git实战三)(5)

git的安装与使用超详细版教程(Git实战三)(6)

这个时候原仓库维护人员就可以收到pr,并对其进行审核、评论、merge或close的操作:

git的安装与使用超详细版教程(Git实战三)(7)

5.1) 在文件修改没有冲突(conflict)的时候,可以直接merge:

5.2) 当文件修改有冲突的时候,就需要原作者去进行RResolve了:

5.3) 或者有冲突的pr直接close:总结下来有以下三种情况:

git的安装与使用超详细版教程(Git实战三)(8)

这个时候我们可以增加一个remote,选择原仓库的HTTPS地址,使用git remote add <远端名> <远端地址>命令来添加一个remote:

git的安装与使用超详细版教程(Git实战三)(9)

7.2)再将远程端的master分支fetch到本地:

git的安装与使用超详细版教程(Git实战三)(10)

7.3) 这时候使用git merge将当前master分支与远端分支合并:

git的安装与使用超详细版教程(Git实战三)(11)

结果中我们发现产生了冲突,再使用git status命令查看:

git的安装与使用超详细版教程(Git实战三)(12)

发现两边都修改了README.md,这个时候我们使用vi对README.md进行查看,当我们merge的时候,系统会把文件换成以下的展示模式:

git的安装与使用超详细版教程(Git实战三)(13)

这种展示模式的意思是以等号=为分隔符,等号上方为当前分支的修改,等号下方为远程分支的修改,这样就产生的冲突,我们可以手动进行修改,然后merge:

git的安装与使用超详细版教程(Git实战三)(14)

git的安装与使用超详细版教程(Git实战三)(15)

git的安装与使用超详细版教程(Git实战三)(16)

7.4) 这个时候刷新GitHub,在我们自己的分支仓库中可以看到已经成功将修改进行merge:

这个时候如果再进行pr的话,遇见conflict的几率就会小的多了命令简单总结:

git remote add other xxxx git fetch other master git merge remotes/other/maste

git的安装与使用超详细版教程(Git实战三)(17)

8.1)将项目用IDEA打开,在Version Control → log中可以看到我们的提交管理线:

git的安装与使用超详细版教程(Git实战三)(18)

8.2)双击文件可以查看文件diff:

git的安装与使用超详细版教程(Git实战三)(19)

,