您的位置:首页 > 其它

git远程操作常用命令

2017-07-30 11:43 274 查看
git 是当前最流行的的版本控制系统,学会使用git来管理我们的项目是每一个程序员必会的技能。

本文主要讲解git中与远程操作操作相关的常用的命令,这些操作包括:

git clone

git remote

git fetch

git pull

git push

学会这几个操作,我们就可以在本地项目的仓库与远程项目操作之间游刃有余。

下面这幅图列出为了完成在本地仓库和远程仓库之间交互的流程,并将需要使用到的命令列入其中,以方便有个直观的理解。



一、 git clone

顾名思义,该命令是用来远程仓库克隆/拷贝一份版本库到本地的。一般而言,这是与远程仓库交互的第一步,使用git clone来完成:

$ git clone <版本库的网址>


比如, 我们想克隆spark的版本库,则应当使用如下代码:

$ git clone https://github.com/apache/spark.git[/code] 
该命令会在本地主机生成一个目录,并且与远程主机的版本库同名。当然,如果你需要自己指定不同的目录名,可以将目录名作为git clone命令的第二个参数。

$ git clone <版本库的网址> <本地目录名>


二、git remote

为了便于管理,Git要求我们必须为每个远程主机指定一个主机名,以方便我们记忆。

git remote 命令就用于管理主机名的。

不带选项的时候,即直接使用 git remote命令将会列出所有远程主机。

$ git remote
origin


我们也可以使用-v参数,这个参数将详细地显示信息,可以列出远程主机的网站

$ git remote -v
origin   https://github.com/apache/spark.git (fetch)
origin   https://github.com/apache/spark.git (push)


上面命令表示,当前只有一台远程主机,并且名字为origin,同时也显示了它的网址。

克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。

$ git clone -o spark https://github.com/apache/spark.git $ git remote
spark


上面命令表示,克隆的时候,指定远程主机名为spark.

git remote show命令加上主机名称,就可以查看对应主机的详细信息。

$ git remote show <主机名>


当然,我们还可以对远程主机做增 、删和重命名操作。具体操作如下:

git remote add命令用于添加远程主机。

$ git remote add <主机名> <网址>


git remote rm命令用于删除远程主机。

$ git remote rm <主机名>


git remote rename命令用于远程主机的改名

$ git remote rename <原主机名> <新主机名>


三、 git fetch

一旦远程主机的版本库有了更新,在git中被称为commit,需要将这些更新取回本地,这时就要用到git fetch命令。

$ git fetch <远程主机名>


上面命令将某个远程主机的更新,全部取回本地。

git fetch命令通常用来查看其他人的进程,因为取回的代码对我们当前本地的开发代码是没有影响。

默认情况下,git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。

$ git fetch <远程主机名> <分支名>


比如,取回origin主机的master分,可以使用如下命令:

$ git fetch origin master


所取回的更新,在本地主机上得用”远程主机名/分支名”的形式读取。

比如origin主机的master,就要用origin/master读取。

git branch命令的-r选项,可以用来查看远程分支,-a选项查看所有分支。

$ git branch -r
origin/HEAD -> origin/master
origin/branch-0.5
origin/branch-0.6
origin/branch-0.7
origin/branch-0.8
origin/branch-0.9
origin/branch-1.0
origin/branch-1.0-jdbc
origin/branch-1.1
origin/branch-1.2
origin/branch-1.3
origin/branch-1.4
origin/branch-1.5
origin/branch-1.6
origin/branch-2.0
origin/branch-2.1
origin/branch-2.2
origin/master

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/branch-0.5
remotes/origin/branch-0.6
remotes/origin/branch-0.7
remotes/origin/branch-0.8
remotes/origin/branch-0.9
remotes/origin/branch-1.0
remotes/origin/branch-1.0-jdbc
remotes/origin/branch-1.1
remotes/origin/branch-1.2
remotes/origin/branch-1.3
remotes/origin/branch-1.4
remotes/origin/branch-1.5
remotes/origin/branch-1.6
remotes/origin/branch-2.0
remotes/origin/branch-2.1
remotes/origin/branch-2.2
remotes/origin/master


上面命令表示,本地主机的当前分支是master,远程分支是有很多,都是带有remotes前缀的。

取回远程主机的更新以后,可以在它的基础上,使用git checkout命令创建一个新的分支。

$ git checkout -b mySpark origin/master


上面命令表示,在origin/master的基础上,创建一个新分支,并将其命名为mySpark。

此外,也可以使用git merge命令或者git rebase命令,在本地分支上合并远程分支,也即将远程中新提交的内容合并到本地版本里。

$ git merge origin/master
# 或者
$ git rebase origin/master


上面命令表示在当前分支上,合并origin/master。

四、git pull

git pull命令的作用是,取回远程主机某个分支的更新,再将其与本地仓库中的指定分支合并。格式如下:

$ git pull<远程主机名> <远程分支名>:<本地分支名>


比如,如果我们想取回origin主机的branch-0.5分支,与本地的master分支合并,那么可以用如下命令来实现。

注意: <远程分支名>:<本地分支名>中冒号两边没有空格

$ git pullorigin branch-0.5:master


如果需要将远程分支是与当前分支合并,则冒号后面的部分可以省略。

$ git pullorigin branch-0.5


上面命令表示,首先从远程仓库中取回origin/branch-0.5分支,

然后将其与当前分支合并。

实质上,这条命令相当于先做git fetch,再做git merge。

$ git fetch origin
$ git merge origin/branch-0.5


在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。

比如,在git clone的时候,git会自动的将所有本地分支默认与远程主机的同名分支,并建立追踪关系。

换句话说,本地的master分支自动”追踪”origin/master分支。

Git也允许手动建立追踪关系。

git branch --set-upstream master origin/branch-0.5


上面命令指定master分支与origin/branch-0.5分支建立追踪关系。

如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。

$ git pullorigin


上面命令表示,本地的当前分支会自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并。

如果当前分支只有一个追踪分支,那么远程主机名都可以省略。

$ git pull


上面命令表示,当前分支会自动与唯一一个追踪分支进行合并。

如果合并需要采用rebase模式,可以使用–rebase选项。

$ git pull--rebase <远程主机名> <远程分支名>:<本地分支名>


如果远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支。

这是为了防止,由于其他人误操作了远程主机的每个分支,导致git pull莫名其妙地删除了本地分支。

当然,我们也是可以改变这个默认行为,只需要加上参数 -p 就会在本地删除远程已经删除的分支。

$ git pull-p
# 等同于下面的命令
$ git fetch --prune origin
$ git fetch -p


五、git push

git push命令用于将本地分支的更新,推送到远程主机中。它的格式与git pull命令很像,格式如下:

$ git push <远程主机名> <本地分支名>:<远程分支名>


需要注意的是,分支推送顺序的写法是 <来源地>:<目的地>。

因此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了。

不带任何参数的git push,默认只推送当前分支,这叫做simple方式。

此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。如果要修改这个设置,可以采用git config命令。

$ git config --global push.default matching
# 或者
$ git config --global push.default simple


还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用–all选项。

$ git push --all origin


上面命令表示,将所有本地分支都推送到origin主机。

如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。

这时,如果你一定要推送,可以使用–force选项。

$ git push --force origin


上面命令使用–force选项,结果导致远程主机上更新的版本被覆盖。

除非你很确定要这样做,否则应该尽量避免使用–force选项。

最后,git push不会推送标签(tag),除非使用–tags选项。

$ git push origin --tags
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git