# Git基础(三)

[上一节](2_git_fundamental)已经将git在本地使用的所有要点都说明了，本节主要说明如何与远程仓库交互。git可以完全脱离网络使用，但是如果本地硬盘损坏，所有修改都会永久失去。使用远程仓库增加备份是很有必要的。

## 一、查看本地仓库的远程仓库的关系

使用`git remote`可以查看当前仓库与远程仓库的关系。

```
➜  HandBook git:(master) git remote
origin
```

`origin`是git在clone项目时为远程仓库服务器生成的默认名字，使用`-v`选项就可以查看远程仓库的详细信息。

```
➜  HandBook git:(master) ✗ git remote -v
origin    git@github.com:Future-Walkers/HandBook.git (fetch)
origin    git@github.com:Future-Walkers/HandBook.git (push)
```

其中，`origin`表示当前的远程服务器的名字，`git@github.com:Future-Walkers/HandBook.git`表示远程仓库的地址，`git@`表示使用的协议是`git`，他通过`SSH`来验证是否具有`clone`的权限。最后的`(fetch)`和`(push)`则表示当前对于远程仓库具有`fetch`和`push`的权限。

当你在本地完成修改后，如果想要上传至远程仓库，需要使用`git remote add <repo>`的方式将本地仓库与远程仓库关联。

## 二、将本地修改上传至远程仓库

在与远程仓库建立关联后，就可以通过`git push`的命令将本地的修改同步到远程的仓库（当然要先将修改添加到暂存区并提交）。

前面看到，本地仓库具有`fetch`和`push`的权限。`fetch`命令就是将远程仓库的修改拉取到本地，与他相似的还有`pull`命令。这两个命令的区别是，`pull`命令出了将远程修改拉取到本地，还会自动将修改合并到你的工作区。

`fetch`后面可以加上远程仓库的名字，例如`git fetch gitlab`就是拉取`gitlab`服务器的代码。

最佳实践是，使用`git fetch`更新本地仓库，并使用`git rebase`将远程修改合并，然后在提交你的代码。

提交代码使用`git push [remote-git-server-name] [branch-name]`，所以说你明白为什么一般大家都会不由自主地使用`git push origin master`了吧，`origin`是默认的远程仓库名,`master`是默认的分支（现在GitHub喜欢在创建项目时使用`main`作为主分支）。在单人项目中，`git push origin master`的使用频率非常高，这没什么问题。但是，如果多人协作时，使用单一分支会很容易发生冲突。

## 三、远程仓库查看

使用`git remote show repo-name`就可以查看远程仓库的情况，这个命令暂时用不太到，先记着就好。

```
➜  HandBook git:(master) ✗ git remote show origin
* remote origin
  Fetch URL: git@github.com:Future-Walkers/HandBook.git
  Push  URL: git@github.com:Future-Walkers/HandBook.git
  HEAD branch: master
  Remote branches:
    RCheung     tracked
    hk_handbook tracked
    master      tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)
```
