1 远程仓库的使用
1.1 查看远程仓库
在 Gitee 上创建一个新的仓库git_demo_04,并配置SSH免密登录。SSH可参考 生成SSH秘钥,Gitee 相关使用可参考 Gitee 帮助中心
使用git clone
命令克隆git_demo_04
仓库到本地,该令会自动将其添加为远程仓库:
$ git clone git@gitee.com:xxx/git_demo_04.git
Cloning into 'git_demo_04'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (4/4), done.
git remote
命令会列出指定的每一个远程服务器的简写,Git 给克隆的仓库服务器的默认名字为 origin :
$ cd git_demo_04/
$ git remote
origin
也可以指定选项 -v
,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL(如果远程仓库不止一个,该命令会将它们全部列出):
$ git remote -v
origin git@gitee.com:xxx/git_demo_04.git (fetch)
origin git@gitee.com:xxx/git_demo_04.git (push)
1.2 从远程仓库中抓取(fetch)与拉取(pull)
- 从远程仓库中获得数据,可以执行
git fetch <remote>
。这个命令会访问远程仓库,从中拉取所有还没有的数据。git fetch
只会将数据下载到本地仓库,不会自动合并或修改当前的数据,必须手动将其合并。 git pull
命令会从最初克隆的服务器上抓取数据并自动合并到当前所在的分支。
1.3 推送到远程仓库
新建一个文件hello.txt并写入一行“hello world”,本地提交后,使用git push <remote> <branch>
命令将 master 分支推送到 origin 服务器:
$ vim hello.txt
$ git add hello.txt
$ git commit -m 'hello init'$ git push origin master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 311 bytes | 311.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.3]
To gitee.com:wise-heart/git_demo_04.gitfe6ed98..4173dbc master -> master
此时,在Gitee上就能看到新建文件hello.txt的内容:
1.4 查看指定的远程仓库
可以使用 git remote show <remote>
命令查看某一个远程仓库的更多信息:
$ git remote show origin
* remote originFetch URL: git@gitee.com:xxx/git_demo_04.gitPush URL: git@gitee.com:xxx/git_demo_04.gitHEAD branch: masterRemote branch:master trackedLocal branch configured for 'git pull':master merges with remote masterLocal ref configured for 'git push':master pushes to master (up to date)
它会列出远程仓库的 URL 与跟踪分支的信息:当前处于 master 分支,如果运行 git pull
,就会抓取所有的远程引用,然后将远程 master 分支合并到本地 master 分支。
1.5 远程仓库的重命名与删除
可以运行 git remote rename
来修改一个远程仓库的简写名(同样也会修改所有远程跟踪的分支名字)。例如,将 origin 重命名为 ori:
$ git remote rename origin ori
Renaming remote references: 100% (3/3), done.$ git remote
ori
可以使用 git remote remove
或 git remote rm
命令删除远程仓库:
$ git remote remove origin
2 远程分支
2.1 远程分支
假设在 git.ourcompany.com 有一个远程仓库。 使用git clone
命令克隆时,Git会做3件事:
- 将远程仓库命名为 origin,拉取它的所有数据。
- 创建一个指向它的 master 分支的指针,并且在本地将其命名为 origin/master。
- 创建一个与 origin 的 master 分支在指向同一个地方的本地 master 分支。
如果在本地的 master 分支做了一些工作,在同一段时间内有其他人推送提交到 git.ourcompany.com 并且更新了它的 master 分支。 此时,只要不拉取 origin 的数据,本地的 origin/master 指针就不会移动。
如果要与给定的远程仓库同步数据,运行 git fetch <remote>
命令。 这个命令查找 “origin” 是哪一个服务器, 从中抓取本地没有的数据,并且更新本地数据库,移动 origin/master 指针到更新之后的位置。
2.2 推送(push)
本地的分支不会自动与远程仓库同步,必须显式地推送。创建一个新的分支serverfix并做一些修改,然后运行 git push <remote> <branch>
推送:
$ git branch serverfix$ git checkout serverfix
Switched to branch 'srverfix'$ vim hello.txt$ git commit -a -m 'serverfif first commit'$ git push origin serverfix
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), 270 bytes | 270.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.3]
remote: Create a pull request for 'serverfix' on Gitee by visiting:
remote: https://gitee.com/xxx/git_demo_04/pull/new/xxx:serverfix...xxx:master
To gitee.com:xxx/git_demo_04.git* [new branch] serverfix -> serverfix
如果想推送本地分支到一个命名不相同的远程分支,可以运行 git push origin serverfix:awesomebranch
命令将本地的 serverfix 分支推送到远程仓库上的 awesomebranch 分支。
下一次其他协作者从服务器上抓取(fetch)数据时,他们会在本地生成一个远程分支 origin/serverfix,指向服务器的 serverfix 分支的引用。但本地不会有一个新的 serverfix 分支,只有一个不可以修改的 origin/serverfix 指针。
2.3 跟踪分支
跟踪分支是与远程分支有直接关系的本地分支。 如果在一个跟踪分支上输入 git pull
,Git 能自动地识别去哪个服务器上抓取、合并到哪个分支。
如果想要在本地的 serverfix 分支(即“跟踪分支”)上工作,可以将其建立在远程跟踪分支之上:
$ git checkout -b serverfix origin/serverfix
Git 为上述命令提供了 --track
快捷方式:
$ git checkout --track origin/serverfix
由于这个操作太常用了, --track
快捷方式本身还有一个快捷方式。 如果本地分支 不存在且 刚好只有一个名字与之匹配的远程分支,Git 会创建一个跟踪分支:
$ git checkout serverfix
可以将本地分支(sf)与远程分支设置为不同的名字:
$ git checkout -b sf origin/serverfix
可以运行 git branch -u
命令修改正在跟踪的分支:
$ git branch -u origin/serverfix
2.4 拉取(fetch)
当 git fetch
命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。它只会获取数据然后让你自己合并。 git pull
命令在大多数情况下它的含义是一个 git fetch 紧接着一个 git merge 命令。建议单独显式地使用 fetch 与 merge 命令。
2.5 删除远程分支
如果已经通过远程分支做完所有的工作,并且将其合并到了远程仓库的 master 分支。可以运行git push --delete
命令来删除一个远程分支:
$ git push origin --delete serverfix
remote: Powered by GITEE.COM [GNK-6.3]
To gitee.com:xxx/git_demo_04.git- [deleted] serverfix