美文网首页Git
git远程操作

git远程操作

作者: Rancune | 来源:发表于2016-09-20 09:59 被阅读0次

    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>
      

    相关文章

      网友评论

        本文标题:git远程操作

        本文链接:https://www.haomeiwen.com/subject/mutoettx.html