11:git 远程操作详解

git 远程操作详解

  • .git文件:版本库区域
    • refs
      • heads:分支管理
        • master
      • remotes:主机名管理
        • demo
        • origin
          • HEAD--ref: refs/remotes/origin/master
          • master--1b2d350606821fd90952038bf0b66fdadf94ae8d
      • tags:标签管理
        • v1.0
    • config
    • HEAD--ref: refs/heads/master

1:git clone

git clone https://github.com/qq1157918444/demo.git

会在当前目录生成一个目录,该目录名称与远程版本库的名称一样

git clone https://github.com/qq1157918444/demo.git demo1

会在当前目录生成一个目录,该目录名称是demo1

git clone 支持多种协议:http,https,git,ssh,ftp...

2:git remote

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

1:列出所有远程主机

$ git remote
origin

2:查看远程库的地址

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

3:clone的时候指定主机名

git clone -o demo  https://github.com/qq1157918444/demo.git
git remote
demo

由于远程主机名变为demo,这个时候pull,push使用以下的:

git pull demo master
git push demo master

4:查看某一个主机名的信息

$ git remote show origin
* remote origin
  Fetch URL: https://github.com/qq1157918444/demo.git
  Push  URL: https://github.com/qq1157918444/demo.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)

5:添加远程主机

语法:

git remote add <主机名> <url>

查看主机名

git remote
origin

添加主机名:

git remote add test https://github.com/qq1157918444/demo.git

查看主机名

git remote
origin
test

使用test

edit
git add .
git commit -m "commit"
git pull test master/git pull origin master
git push test master/git push origin master

cinfig配置

[remote "origin"]
url = https://github.com/qq1157918444/demo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[remote "test"]
url = https://github.com/qq1157918444/demo.git
fetch = +refs/heads/*:refs/remotes/test/*

6:删除远程主机

git remote rm <主机名>

查看主机名

git remote
origin
test

删除主机名

git remote rm test

查看主机名

git remote
origin

config

[remote "origin"]
url = https://github.com/qq1157918444/demo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master

7:修改远程主机

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

添加一个主机名test1

$ git remote add test2 https://github.com/qq1157918444/demo.git

查看主机名

git remote
origin
test2

config

[remote "origin"]
url = https://github.com/qq1157918444/demo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[remote "test2"]
url = https://github.com/qq1157918444/demo.git
fetch = +refs/heads/*:refs/remotes/test2/*

修改主机名

$ git remote rename test2 test3

查看主机名

git remote
origin
test3

config

[remote "origin"]
url = https://github.com/qq1157918444/demo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[remote "test3"]
url = https://github.com/qq1157918444/demo.git
fetch = +refs/heads/*:refs/remotes/test3/*

3:git fetch

远程主机有了新的commit,当我们需要把这些commit更新到本地,但又不影响本地代码
可以使用git fetch

语法:

git fetch <远程主机名> //取回所有分支的更新
git fetch <远程主机名><分支名>//取回指定分支的更新

fetch

$ git fetch origin master
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 2), reused 3 (delta 2), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/qq1157918444/demo
 * branch            master     -> FETCH_HEAD
   ac3d784..46a22ed  master     -> origin/master

rebase

$ git rebase origin/master
First, rewinding head to replay your work on top of it...
Fast-forwarded master to origin/master.

fetch

$ git fetch origin master
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 2), reused 3 (delta 2), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/qq1157918444/demo
 * branch            master     -> FETCH_HEAD
   46a22ed..6490def  master     -> origin/master

merge

$ git merge origin/master
Updating 46a22ed..6490def
Fast-forward
 test.txt | 1 +
 1 file changed, 1 insertion(+)

4:git pull

取回远程主机某个分支的更新,再与本地的指定分支合并。

语法:

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

取回origin主机的master分支与本地的dev分支合并

git pull origin master:dev

取回origin主机的master分支与当前分支合并

git pull origin master

上述相当于:

git fetch origin master
git merge origin/master

我么在git clone的时候会把本地分支与远程主机的同名分支默认创建一种追踪关系(tracking)

手动建立追踪关系

git branch --set-upstream master origin/master

如果当前分支与远程分支追踪关系一旦建立,git pull就可以省略远程分支名

git pull origin

如果当前分支只有一个追踪关系,远程主机名也可以省略

git pull

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

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

5:git push

将本地分支的更新,推送到远程主机。

语法:

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

如果省略远程分支名,则把本地分支推送至远程同名分支,如果没有,则建立同名分支

git push origin master

如果省略本地分支名,则表示要删除指定的远程分支名

git push origin :master
git push origin --delete master

如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

git push origin

如果当前分支只有一个追踪分支,嘛呢主机名可以省略

git push

-u选项指定一个默认主机

git push -u origin master

simple方式:git push

默认推送当前分支

matching方式:git push

默认推送所有分支

git2.0以前默认采用matching方式,2.0之后默认采用simple方式

通过一下设置可以更改这种默认

git config --global push.default matching
git config --global push.default simple

不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机

git push --all origin

上面如果远程有更新的commit,还提示错误,会要求本地先pull,在push,如果要强行推送:

git push --force origin
posted on 2016-05-06 14:23  借个火点烟  阅读(279)  评论(0编辑  收藏  举报