git远程操作

git clone

  • 基本命令

    git clone <远程版本库> <本地目录名>
    
  • git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等

    $ git clone http[s]://example.com/path/to/repo.git/
    $ git clone ssh://example.com/path/to/repo.git/
    $ git clone git://example.com/path/to/repo.git/
    $ git clone /opt/git/project.git
    $ git clone file:///opt/git/project.git
    $ git clone ftp[s]://example.com/path/to/repo.git/
    $ git clone rsync://example.com/path/to/repo.git/
    

git remote

  • 为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名

    git remote
    origin
    
  • git remote -v | --verbose 列出详细信息,可以查看远程主机的网址

    git remote --verbose
    origin  https://github.com/ytongshang/Notes.git (fetch)
    origin  https://github.com/ytongshang/Notes.git (push)
    
  • 克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要 用git clone命令的-o选项指定

    git clone -o jQuery https://github.com/jquery/jquery.git
    git remote
    jQuery
    
  • git remote show命令加上主机名,可以查看该主机的详细信息

    git remote show origin
    remote origin
    Fetch URL: https://git.coding.net/Rancune/learnGit.git
    Push  URL: https://git.coding.net/Rancune/learnGit.git
    HEAD branch: master
    Remote branch:
    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)
    
  • git remote add命令用于添加远程主机

    git remote add origin https://git.coding.net/Rancune/learnGit.git
    
  • git remote rm命令用于删除远程主机。

    git remote rm origin
    
  • git remote rename命令用于远程主机的改名。

    git remote rename origin hapi
    

git fetch

  • 一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地,这时就要 用到git fetch命令,下面命令将某个远程主机的更新,全部取回本地

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

    git fetch <远程主机名> <分支名>
    git fetch origin master
    
  • 所取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取,此时本地的分支与远程主机的分支 是没有合并的,两者还是独立的,比如origin主机的master,就要用origin/master读取。 git branch命令的-r选项,可以用来查看远程分支,-a选项查看所有分支

    git branch -r
    origin/master
    git branch -a
    master
    remotes/origin/master
    
  • 本地主机的当前分支是master,远程分支是origin/master。取回远程主机的更新以后,可以在 它的基础上,可以用checkout命令切换到另外的一个分支

    git checkout master 切换本地的主分支
    git checkout origin/master 切换到origin的主分支
    
  • 也可以使用git merge命令或者git rebase命令,在本地分支上合并远程分支

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

git pull

  • git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并, 实际上是git fetch与git merge两个命令的合并

    git pull <远程主机名> <远程分支名>:<本地分支名>
    
  • 取回origin主机的next分支,与本地的master分支合并,需要写成下面这样

    git pull origin next:master
    
  • 如果远程分支是与当前分支合并,则冒号后面的部分可以省略

    git pull origin next
    
  • 3中的命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge

    git fetch origin
    或git fetch origin next
    git merge origin/next
    
  • Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候, 所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动 "追踪"origin/master分支,上面命令指定master分支追踪origin/next分支

    git branch --set-upstream master origin/next
    
  • 如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名,下面命令表示,本地的当前 分支自动与对应的origin主机"追踪分支"(remote-tracking branch)进行合并

    git pull origin
    
  • 如果当前分支只有一个追踪分支,连远程主机名都可以省略。当前分支自动与唯一一个追踪分支进行合并

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

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

git push

  • 把本地库的所有内容推送到远程库上,分支推送顺序的写法是<来源地>:<目的地>,所以 git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。

    git push <远程主机名> <本地分支名>:<远程分支名>
    
  • 将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建

    git push origin master
    
  • 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程 分支。下面命令表示删除origin主机的master分支

    git push origin :master
    git push origin --delete master
    
  • 如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略,下面命令表示, 将当前分支推送到origin主机的对应分支

    git push origin
    
  • 如果当前分支只有一个追踪分支,那么主机名都可以省略

    git push
    
  • 下面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以 不加任何参数使用git push了

    git push -u origin master
    
  • 就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用–all选项

    git push --all origin
    
  • 如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异, 然后再推送到远程主机。这时,如果你一定要推送,可以使用–force选项,下面命令使用–force选项, 结果导致在远程主机产生一个"非直进式"的合并(non-fast-forward merge)。除非你很确定要这样做, 否则应该尽量避免使用–force选项

    git push --force origin
    
  • git push不会推送标签(tag),除非使用–tags选项。

    git push origin -tags
    

git 标签

  • 创建标签,首先切换到对应的分支,默认会为当前的分支 HEAD 打上标签

    git checkout dev
    git tag "v0.1"
    
  • 默认标签是打在最新提交的commit上的,还可以为历史提交打上标签

git log --pretty=oneline --abbrev-commit
6a5819e merged bug fix 101
cc17032 fix bug 101
7825a50 merge with no-ff
6224937 add merge
59bc1cb conflict fixed
400b400 & simple
75a857c AND simple
fec145a branch test
d17efd8 remove test.txt

git tag v0.9 6224937
  • 标签不是按时间顺序列出,而是按字母排序的。可以用git show

    <tagname>查看标签信息</tagname>

    git show v0.9
    
  • 还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字

    git tag -a v0.1 -m "version 0.1 released" 3628164
    
  • 可以通过-s用私钥签名一个标签,签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如 果没有找到gpg,或者没有gpg密钥对,就会报错

    git tag -s v0.2 -m "signed version 0.2 released" fec145a
    
  • 如果标签打错了,也可以删除,因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错 的标签可以在本地安全删除

    git tag -d v0.1
    
  • 如果要推送某个标签到远程,使用命令git push <远程主机名>

    <tagname>
    </tagname>

    git push origin v1.0
    
  • 一次性推送全部尚未推送到远程的本地标签

    git push origin --tags
    
  • 如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除,然后,从远程删除。 删除命令也是push,第一种方式相当于push一个空的tag到原来的v0.9的tag,这里origin 与:之前有一个 空格,下面则是一种删除方法,与git 删除远程分支的原理差不多。

    git tag -d v0.9
    git push origin :refs/tags/v0.9
    或
    git push origin --delete tag <tagname>
    或
    git push origin : <tagname>
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容