03 GitHub的基本使用-fork、clone、merge PR、fetch、IDE中的Git集成

1、Fork

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

  • 1.1) 点击fork按钮对项目进行fork:
    在这里插入图片描述
  • 1.2)fork完成后就可以在我们自己的GitHub账户下见到被fork的项目:
    在这里插入图片描述

2、Clone

  • 2.1)接着我们使用git clone命令将fork的项目clone到本地:
    在这里插入图片描述
$ git clone git@github.com:xxx/Hogwarts_Online2.git Hogwarts_Online2_other/
Cloning into 'Hogwarts_Online2_other'...
remote: Enumerating objects: 9, done.
remote: Total 9 (delta 0), reused 0 (delta 0), pack-reused 9
Receiving objects: 100% (9/9), done.
Resolving deltas: 100% (1/1), done.

$ cd Hogwarts_Online2_other/
Hogwarts_Online2_other qinzhen$ ls
README.md

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

  • 2.2)项目的作者可以看到有哪些人fork了自己的项目:
    在这里插入图片描述

3、Push

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

霍格沃兹测试学院定向班第二期演练
try it
  • 3.2)将文件提交到本地仓库:
$ git commit -a -m "try by allen_qin"
[master 84b1c8f] try by allen_qin
 1 file changed, 1 insertion(+), 1 deletion(-)
$ git log
commit 84b1c8fe890e7871f4033a5aebd13c9de50dbff4 (HEAD -> master)
Author: xxx <376057520@qq.com>
Date:   Sat Sep 21 21:43:27 2019 +0800

    try by allen_qin

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

$ git remote -v
origin	git@github.com:xxx/Hogwarts_Online2.git (fetch)
origin	git@github.com:xxx/Hogwarts_Online2.git (push)
  • 3.3)只用git push命令将本地仓库的文件推到远程仓库中去:
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 269 bytes | 269.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:qinzhen666/Hogwarts_Online2.git
   7ba71c7..84b1c8f  master -> master

如下图可以看到已经成功将修改后的README.md文件推到了GitHub上:
在这里插入图片描述

4、PR(pull request)

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

  • 4.1)发起pr,点击New pull request
    在这里插入图片描述
    然后我们可以看到仓库路径从我的仓库向原作者项目仓库地址发起pr请求,在下面可以看到我对项目的修改diff
    在这里插入图片描述
  • 4.2)这个时候我们点击Create new pull request按钮,填写描述后再点击Create new pull request按钮:
    在这里插入图片描述
    在这里插入图片描述

5、merge PR

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

  • 5.1) 在文件修改没有冲突(conflict)的时候,可以直接merge:
    在这里插入图片描述
  • 5.2) 当文件修改有冲突的时候,就需要原作者去进行Resolve了:
    在这里插入图片描述
  • 5.3) 或者有冲突的pr直接close:
    在这里插入图片描述
    总结下来有以下三种情况:
  • 无冲突直接merge
  • 有冲突手工merge
  • 有冲突close并重新发起pr

6、Fetch(实际使用的相对较少,更多的使用remote)

有时候我们fork了项目,但是很有可能我们对项目的修改会比原项目滞后,这就会导致pr的时候容易出现conflict;为了能让我们知道当前的修改是否conflict,就需要使用git fetch命令了;
使用git fetch拿下来一个远程分支的文件,看一下这个分支和我自己的有什么冲突没

7、Remote

  • 7.1)先使用git remote -v命令来查看本地仓库与远程仓库的关联关系
    $ git remote -v
    origin	git@github.com:xxx/Hogwarts_Online2.git (fetch)
    origin	git@github.com:xxx/Hogwarts_Online2.git (push)
    
    这个时候我们可以增加一个remote,选择原仓库的HTTPS地址,使用git remote add <远端名> <远端地址>命令来添加一个remote
    $ git remote add seveniruby https://github.com/seveniruby/Hogwarts_Online2.git
    $ git remote -v
    origin	git@github.com:xxx/Hogwarts_Online2.git (fetch)
    origin	git@github.com:xxx/Hogwarts_Online2.git (push)
    seveniruby	https://github.com/seveniruby/Hogwarts_Online2.git (fetch)
    seveniruby	https://github.com/seveniruby/Hogwarts_Online2.git (push)
    
    • 7.2)再将远程端的master分支fetch到本地:
    $ git fetch seveniruby master
    remote: Enumerating objects: 66, done.
    remote: Counting objects: 100% (66/66), done.
    remote: Compressing objects: 100% (29/29), done.
    remote: Total 64 (delta 16), reused 64 (delta 16), pack-reused 0
    Unpacking objects: 100% (64/64), done.
    From https://github.com/seveniruby/Hogwarts_Online2
     * branch            master     -> FETCH_HEAD
     * [new branch]      master     -> seveniruby/master
    $ git branch -a
    * master
      remotes/origin/HEAD -> origin/master
      remotes/origin/master
      remotes/seveniruby/master
    
    • 7.3) 这时候使用git merge将当前master分支与远端分支合并:
    $ git merge remotes/seveniruby/master
    Auto-merging README.md
    CONFLICT (content): Merge conflict in README.md
    Automatic merge failed; fix conflicts and then commit the result.
    
    结果中我们发现产生了冲突,再使用git status命令查看:
    $ git status
    On branch master
    Your branch is up to date with 'origin/master'.
    
    You have unmerged paths.
     (fix conflicts and run "git commit")
     (use "git merge --abort" to abort the merge)
    
    Unmerged paths:
     (use "git add <file>..." to mark resolution)
    
       both modified:   README.md
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    发现两边都修改了README.md,这个时候我们使用viREADME.md进行查看,当我们merge的时候,系统会把文件换成以下的展示模式:
    # Hogwarts_Online2
    
    霍格沃兹测试学院定向班第二期演练
    <<<<<<< HEAD
    try it
    =======
    test studio
    liky test fork
    ww36315610
    from testing-studio.com
    haha
    branch windy_practice update 1
    branch windy_practice update 2
    neck pain
    branch seveniruby update 1
    branch seveniruby update 2
    >>>>>>> remotes/seveniruby/master
    
    这种展示模式的意思是以等号=为分隔符,等号上方为当前分支的修改,等号下方为远程分支的修改,这样就产生的冲突,我们可以手动进行修改,然后merge:
    # Hogwarts_Online2
    
    霍格沃兹测试学院定向班第二期演练
    try it
    test studio
    liky test fork
    ww36315610
    from testing-studio.com
    haha
    branch windy_practice update 1
    branch windy_practice update 2
    neck pain
    branch seveniruby update 1
    branch seveniruby update 2
    
    $ git commit -a -m "fix conflict"
    [master 5f63b68] fix conflict
    
    $ git push
    Enumerating objects: 7, done.
    Counting objects: 100% (7/7), done.
    Delta compression using up to 8 threads
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 301 bytes | 301.00 KiB/s, done.
    Total 3 (delta 1), reused 0 (delta 0)
    remote: Resolving deltas: 100% (1/1), completed with 1 local object.
    To github.com:xxx/Hogwarts_Online2.git
       84b1c8f..5f63b68  master -> master
    
  • 7.4) 这个时候刷新GitHub,在我们自己的分支仓库中可以看到已经成功将修改进行merge
    在这里插入图片描述
    这个时候如果再进行pr的话,遇见conflict的几率就会小的多了
    命令简单总结:
    git remote add other xxxx
    git fetch other master
    git merge remotes/other/master
    

到这里,一个基本的git分支管理的流程就走完了,再简单介绍一下IDE中的Git集成

8、IDE中的Git集成

  • 8.1)将项目用IDEA打开,在Version Control -> log中可以看到我们的提交管理线:
    在这里插入图片描述
  • 8.2)双击文件可以查看文件diff:
    在这里插入图片描述
    在这里插入图片描述
  • 8.3)在右下角还可以进行Git分支的管理:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值