在github上同步fork的项目
在github上可以fork别人的项目成为自己的项目,但是当fork的项目更新后自己fork的项目应该怎么怎么更新呢?我从网上看到了两种方式,一种是采用github的web界面中的操作来实现,具体是通过“Pull Request”功能来实现;另外一种是通过在本地合并代码分支的方式来解决。本文将采用第二种方式,以我最近fork的项目为例来说明。
将fork后自己的项目clone到本地
执行git clone https://github.com/kuring/leetcode.git
即可将自己fork的代码更新到本地。
fork完成后的远程分支和所有分支情况如下:
1 | kuring@T420:/data/git/leetcode$ git remote -v |
将fork之前的项目clone到本地
将fork之前的项目添加到本地的远程分支haoel中,执行git remote add haoel https://github.com/haoel/leetcode
。
再查看一下远程分支和所有分支情况:
1 | kuring@T420:/data/git/leetcode$ git remote -v |
将远程代码halel分支fetch到本地
执行git fetch haoel
,此时的所有分支情况如下,可以看出多了一个remotes/haoel/master分支。
1 | kuring@T420:/data/git/leetcode$ git branch -a |
将halel分支merge到本地的分支
执行git merge remotes/haoel/master
,此时发现有冲突,提示内容如下:
1 | uring@T420:/data/git/leetcode$ git merge haoel/master |
之所以出现上述错误,这是由于我在fork之后在本地修正了源代码中的一处bug,而在fork之后到现在的时间间隔内原作者haoel也正好修正了该bug。打开文件后发现存在如下的内容,其实就是代码风格的问题,我这里将错误进行修正。
1 | 36 <<<<<<< HEAD |
如果没有冲突的情况下通过merge命令即会将haoel/master分支合并master分支并执行commit操作。可以通过git status
命令看到当前冲突的文件和已经修改的文件。执行git status
命令可以看到如下内容,说明未冲突的文件已经在暂存区,冲突的文件需要修改后执行add操作:
1 | kuring@T420:/data/git/leetcode$ git status |
解决完冲突后执行add操作后再通过git status
命令查看的内容如下。通过git status
命令却看不到已经解决的冲突文件,对于这一点我还是很理解,参考文章中的Git 分支 - 分支的新建与合并是可以看到已经解决的冲突文件的,因为执行git add
后将解决完成冲突的文件放到了暂存区中。
1 | kuring@T420:/data/git/leetcode$ git status |
这里冲突后merge操作并没有执行commit操作,需要解决冲突后再手工执行commit操作,此时整个的同步操作就已经完成了。
结尾
如果隔一段时间后又需要同步项目了仅需要执行git fetch haoel
命令以下的操作即可。
参考
由于git命令较多,为了便于查阅增加一处git data transprot commands