Git与GitHub的简单了解(3)

时间:2022-01-11 16:08:45

5. 推送至远程仓库

​ 在GitHub上首先创建同为git-tutorial的仓库,基本步骤为:打开注册好的GitHub网页,点击右上角工具栏的New repository图标,如下:


Git与GitHub的简单了解(3)

​ 对新建仓库命名,但此时不需要勾选Initialize this repository with a README 选项 。

  • git remote add ---- 添加远程仓库

​ 在 GitHub 上创建的仓库路径为“git@github.com:用户名 /git-tutorial.git”。

$ git remote add origin git@github.com:github-book/git-tutorial.git

​ 执行 git remote add命令之后, Git 会自动将git@github.com:github-book/git-tutorial.git远程仓库的
名称设置为 origin 。

  • git push ---- 推送至远程仓库

​ 想要将本地仓库中的内容推送给远程仓库需要用到git push命令。

$ git push -u origin master

Counting objects: 20, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (20/20), 1.60 KiB, done.
Total 20 (delta 3), reused 0 (delta 0)
To git@github.com:github-book/git-tutorial.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.

​ 执行 git push命令,当前分支的内容就会被推送给远程仓库origin 的 master 分支。 -u参数可以在推送的同时,将 origin 仓库的 master 分支设置为本地仓库当前分支的 upstream(上游)。添加了这个参数,将来
运行 git pull命令从远程仓库获取内容时,本地仓库的这个分支就可以直接从 origin 的 master 分支获取内容,省去了另外添加参数的麻烦。

推送至master以外的分支

​ 现在我们新建了feature-D的分支,并以同名形式推送到远程仓库:

$ git checkout -b feature-D
Switched to a new branch 'feature-D'

​ 现在我们已经在本地建立了分支D,push一下:

$ git push -u origin feature-D
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:github-book/git-tutorial.git
* [new branch] feature-D -> feature-D
Branch feature-D set up to track remote branch feature-D from origin.

6. 从远程仓库获取

  • git clone ---- 获取远程仓库

切换到其他的目录下,将GitHub上的仓库clone到本地:

$ git clone git@github.com:github-book/git-tutorial.git
Cloning into 'git-tutorial'...
remote: Counting objects: 20, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 20 (delta 3), reused 20 (delta 3)
Receiving objects: 100% (20/20), done.
Resolving deltas: 100% (3/3), done.
$ cd git-tutorial

​ clone后我们默认是在master的分支下,同时系统会自动将 origin 设置成该远程仓库的标识符。 也就是说,当前本地仓库的 master 分支与 GitHub 端远程仓库(origin)的 master 分支在内容上是完全相同的。

​ 用 git branch -a命令查看当前分支的相关信息。添加 -a参数可以同时显示本地仓库和远程仓库的分支信息 :

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/feature-D
remotes/origin/master

获取远程feature-D分支

$ git checkout -b feature-D origin/feature-D
Branch feature-D set up to track remote branch feature-D from origin.
Switched to a new branch 'feature-D'

​ -b 参数的后面是本地仓库中新建分支的名称 ,我们依然对它命名为feature-D,整体的意思是指定了 origin/feature-D,就是说以名为 origin 的仓库(这里指 GitHub 端的仓库)的 feature-D 分支为来源,在本地仓库中创建 feature-D 分支。

修改本地feature-D分支后再做提交

$ git diff
diff --git a/README.md b/README.md
index af647fd..30378c9 100644
--- a/README.md
+++ b/README.md
@@ -3,3 +3,4 @@
- feature-A
- fix-B
- feature-C
+ - feature-D

$ git commit -am "Add feature-D"
[feature-D ed9721e] Add feature-D
1 file changed, 1 insertion(+)

推送feature-D分支

$ git push
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 281 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@github.com:github-book/git-tutorial.git
ca0f98b..ed9721e feature-D -> feature-D

从远程仓库获取 feature-D 分支,在本地仓库中提交更改,再将feature-D 分支推送回远程仓库,通过这一系列操作,就可以与其他开发者相互合作,共同培育 feature-D 分支,实现某些功能。

  • git pull ---- 获取最新的远程仓库分支

​ 现在回到最起先的目录下,这里仅仅创建feature-D分支,未对其进行修改,而远程仓库中已经有了新的动态,我们要把这里的分支更新。

$ git pull origin feature-D
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1)
Unpacking objects: 100% (3/3), done.
From github.com:github-book/git-tutorial
* branch feature-D -> FETCH_HEAD
First, rewinding head to replay your work on top of it...
Fast-forwarded feature-D to ed9721e686f8c588e55ec6b8071b669f411486b8.

​ 今后只需要像平常一样在本地进行提交再 push 给远程仓库,就可以与其他开发者同时在同一个分支中进行
作业,不断给 feature-D 增加新功能。

如果两人同时修改了同一部分的源代码, push 时就很容易发生冲突。所以多名开发者在同一个分支中进行作业时,为减少冲突情况的发生,建议更频繁地进行 push 和 pull 操作。