前提:
远程的主机名(远程仓库服务器名): origin
本地的主分支: master(本地master
分支)
远程的主分支: maste(远程仓库的master
分支)
git clone [email protected]:xxx/yyy.git
使用git clone
命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin
” 为简写,同时会自动设置本地master
分支跟踪克隆的远程仓库的master
分支。
使用git remote, 至少应该能看到origin
--这是 Git 给你克隆的仓库服务器的默认名字.
git remote -v, 会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL.
origin [email protected]:xxx/yyy.git (fetch)
origin [email protected]:xxx/yyy.git (push)
也可以在运行 git remote add <shortname> <url>
添加一个新的远程 Git 仓库,同时指定一个可以轻松引用的简写,如添加gs:
这个名字是作为远程仓库服务器的别名使用, 现在你可以在命令行中使用字符串 gs
来代替整个 URL
这个名字只能在添加远程仓库时候定义好的,后续建议不要再更改, 在后面的代码中我们就使用origin为远程仓库名. (当然可以使用更换名字git remote rename origin newName)
假设当前所在的本地分支是master
$ git remote add gs [email protected]:xxx/yyy.git (fetch) $ git remote -v gs [email protected]:xxx/yyy.git (fetch) (fetch) gs [email protected]:xxx/yyy.git (fetch) (push) 可以运行git fetch gs: $ git fetch gs From [email protected]:xxx/yyy.git * [new branch] master -> gs/master
$ git remote remane gs origin
$ git remote -v
origin [email protected]:xxx/yyy.git (fetch) (fetch)
origin [email protected]:xxx/yyy.git (fetch) (push)
当获取数据时候,是使用git fetch [remote-name],例如
假设当前所在的本地分支是master
git fetch origin master
git merge master
必须注意 git fetch
命令会将数据拉取到本地仓库 - 它并不会自动合并或修改当前的工作, 当准备好时必须手动将其合并入你的工作区。
如果你有一个分支设置为跟踪一个远程分支,可以使用 git pull
命令来自动的抓取然后合并远程分支到当前分支
git pull = git fetch + git merge
当前本地的分支是master, 远程仓库建立了一个分支masterBranch, 现在要关联到本地
git checkout -b masterBranchLocal origin/masterBranch (基于本地master创建一个分支masterBranchLocal,并关联远程仓库的masterBranch,同时本地切换到masterBranchLocal)
git branch (可以查看当前的分支是在masterBranchLocal上面)
* masterBranchLocal
master
git pull origin masterBranch (从远程仓库的masterBranch下载数据到masterBranchLocal分支上)
或则直接git pull (这行语句和上面一样, 因为当前分支和远程仓库的分支已经关联起来了)
下面的三行语句和上面的是等效的,只不过拆开写了.
git branch masterBranchLocal
git checkout masterBranchLocal
git pull origin masterBranch (这里不能直接用git pull, 因为masterBranchLocal没有和任何仓库的分支关联)
git push [remote-name] [branch-name]
。 当你想要将 master
分支推送到 origin
服务器时(再次说明,克隆时通常会自动帮你设置好那两个名字),那么运行这个命令就可以将所做的备份到服务器:
$ git push origin master (推送本地master分支到远程仓库master上)这里省略了 refs/for/master
$ git push origin master:refs/for/master (和上面的命令效果一样)
$ git push origin masterBranch (推送本地master分支到远程仓库masterBranch分支上, 当前处在masterBranch分支上)
git push的一般形式为 git push <远程主机名> <本地分支名> <远程分支名> ,例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名, 第一个master是本地分支名,第二个master是远程分支名。
如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建