添加远程仓库
你首先需要有一个远程仓库,我是在 码云上创建的项目,你也可以使用比较洋气的GitHub
运行 git remote add <shortname> <url>
添加一个新的远程 Git 仓库,同时指定一个你可以轻松引用的简写:
$ git remote add testGit git@git.oschina.net:IyayuProject/TestGit.git
解释:
1.IyayuProject是你的用户名,而TestGit则是你的项目名。
2.添加远程仓库后,testGit是你的远程仓库的名字,它同时也用来引用远程仓库的URL。
注意:
添加远程仓库前,你必须先有一个本地库,在本地库中添加远程操作。
我个人的理解就是将本地仓库和远程仓库进行了关联。
从远程仓库中抓取数据
运行 git fetch [remote-name]
命令会访问远程仓库,从中抓取所有你还没有的数据(其实就是将远程服务器的更新取回本地)。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。
注意:可以使用git merge
命令或者git rebase
命令,在本地分支上合并远程分支。
如果只想取回特定分支的更新,可以指定分支名。
$ git fetch <远程主机名> <分支名>
比如,取回origin
主机的master
分支。
$ git fetch origin master
所取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取。比如origin
主机的master
,就要用origin/master
读取。
$ git log origin/master
如果你使用clone
命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。 所以,git fetch origin
会抓取克隆(或上一次抓取)后新推送的所有工作。
必须注意git fetch
命令会将数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。
如果你有一个分支设置为跟踪一个远程分支,可以使用git pull
命令来自动的抓取然后合并远程分支到当前分支。
默认情况下,git clone
命令会自动设置本地master
分支跟踪克隆的远程仓库的master
分支(或不管是什么名字的默认分支)。 运行git pull
通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。
git pull
命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。
$ git pull <远程主机名> <远程分支名>:<本地分支名>
比如,取回origin
主机的next
分支,与本地的master
分支合并,需要写成下面这样。
$ git pull origin next:master
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
$ git pull origin next
上面命令表示,取回origin/next
分支,再与当前分支合并。实质上,这等同于先做git fetch
,再做git merge
。
$ git fetch origin$ git merge origin/next
推送到远程仓库
当你想分享你的项目时,必须将其推送到上游。
这个命令很简单:$ git push <远程主机名> <本地分支名>:<远程分支名>
。当你想要将master
分支推送到origin
服务器时(再次说明,克隆时通常会自动帮你设置好那两个名字),那么运行这个命令就可以将你所做的备份到服务器:
$ git push origin master
只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。 当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。
注意,分支推送顺序的写法是<来源地>:<目的地>,所以
git pull
是<远程分支>:<本地分支>,而git push
是<本地分支>:<远程分支>。
如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
$ git push origin master
上面命令表示,将本地的master
分支推送到origin
主机的```master``分支。如果后者不存在,则会被新建。
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
$ git push origin :master
# 等同于
$ git push origin --delete master
上面命令表示删除origin
主机的master
分支。
如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
$ git push origin
上面命令表示,将当前分支推送到origin
主机的对应分支。
如果当前分支只有一个追踪分支,那么主机名都可以省略。
$ git push
如果当前分支与多个主机存在追踪关系,则可以使用-u
选项指定一个默认主机,这样后面就可以不加任何参数使用git push
。
$ git push -u origin master
上面命令将本地的master
分支推送到origin
主机,同时指定origin
为默认主机,后面就可以不加任何参数使用git push
了。
还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用--all
选项。
$ git push --all origin
上面命令表示,将所有本地分支都推送到origin
主机。
如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull
合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用--force
选项。
$ git push --force origin
上面命令使用--force
选项,结果导致远程主机上更新的版本被覆盖。除非你很确定要这样做,否则应该尽量避免使用--force
选项。
最后,git push
不会推送标签(tag),除非使用--tags
选项。
$ git push origin --tags