远程仓库
1.克隆远程仓库
git clone <url> [dir]
#将存储库克隆到新创建的目录中,默认与远程主机的版本库同名,可以指定目录名称dir
执行此命令会为克隆的存储库中的每个分支创建远程跟踪分支(使用git branch -r
可见),并且本地创建一个master分支,与本地的远程跟踪分支master进行关联。
2.添加远程仓库
git remote add <remoteName> <url>
#remoteName为远程仓库名称,url为远程仓库链接
实际上是与远程仓库建立联系,这样在推送和拉取代码时就知道往哪里推送和拉取了。
示例:在github上新建一个仓库,然后在本地一个空的git仓库里添加远程仓库
3.查看远程仓库
git remote
#只查看远程仓库名
git remote -v
#查看远程仓库名及url信息
4.修改|查看远程仓库链接
git remote set-url <remoteName> <url>
#设置指定远程仓库的链接
git remote get-url <remoteName>
#获取指定远程仓库的链接
5.修改本地远程仓库名称
git remote rename <old> <new>
6.删除本地的远程仓库
git remote remove <remoteName>
远程分支
1.远程分支查看
git branch -a
#查看本地及远程分支
git branch -r
#只查看远程分支
git branch -l
#只查看本地分支
2.1从远程分支拉取内容
git fetch <remote_name> <branch_name>
#从远程仓库的指定同名分支上拉取最新的内容
git fetch
#如果省略参数,会从远程仓库的所有分支上拉取最新的内容
这将更新git remote中所有的远程仓库所包含分支的最新commitId, 将其记录到.git/FETCH_HEAD
文件中
FETCH_HEAD
:该文件在git目录下,指向目前已经从远程仓库取下来的分支的末端版本
git fetch
更新远程仓库的方式如下:
# 方法一
git fetch origin master #从远程的origin仓库的master分支下载代码到本地的origin master
git log -p master.. origin/master #比较本地的仓库和远程仓库的区别
git merge origin/master #把远程下载下来的代码合并到本地仓库
# 方法二
git fetch origin master:temp #本地新建一个分支temp,并将远程origin仓库的master分支下载到本地temp分支
git diff temp #比较master分支和temp分支的不同
git merge temp #合并temp分支到master分支
git branch -d temp #删除temp
2.2从远程分支拉取内容
git pull <remote_name> <branch_name>
#从远程仓库的指定同名分支上拉取最新的内容,会自动进行分支的合并
该命令等同于 git fetch + git merge
git pull
#如果省略参数,会自动从当前分支名称相同的远程分支上拉取内容。如果当前分支没有跟踪到任何远程分支或者跟踪的远程分支不同名,则拉取失败
git pull origin master --allow-unrelated-histories
#合并两个独立的仓库(第一次合并仓库的时候必须使用该选项),否则两个仓库如果都有内容的话,第一次进行合并会报错:refusing to merge unrelated histories
3.推送本地分支至远程
git push <remote_name> <branch_name>
#将指定本地分支推送到远程仓库的同名分支上,如果远程分支不存在则会自动创建
git push
#如果省略参数,会自动将当前分支推送到与其分支名称相同的远程分支上。如果当前分支没有跟踪到任何远程分支或者跟踪的远程分支不同名,则推送失败
git push <remote_name> <branch_name>:<remote_branch>
#将本地分支推送到远程指定的分支上
例如:
git push origin dev
#推送本地dev分支到远程的dev分支
git push origin HEAD:master
#推送本地HEAD指向的分支(当前工作分支)到远程的master分支
4.远程分支检出
如果远程存在多个分支,使用 git clone 只会创建一个master分支 ,需要使用命令进行远程分支检出。
git checkout -b <branch_name> <remote_name>/<remote_branch>
#本地新建分支并检出远程分支代码
git checkout <remote_branch>
#也可以使用该命令进行检出
对于该命令如果本地有该分支,执行切换操作,如果本地没有该分支,会查找remote上有无该分支,如果有,并将HEAD指向远程分支,并建立追踪关系,如果本地和远程都没有,则报错。
有时候,会发现明明远端有这个分支却依然报错,可以执行git pull
,然后再checkout
4.远程分支合并
通常最终代码发布是使用master分支,所以发布前需要进行远程分支合并操作,实际是在本地分支进行合并后然后推送到远程master上,如果本地没有检出远程分支则需要先进行远程分支的检出
1.git checkout master
#切换到master分支
2.git merge <branch_name>
#将分支合并到master分支
3.git push origin master
#将master分支推送至远程
注:origin为默认远程仓库名称
5.远程分支删除
如果远程分支合并完成后不再需要了,可以进行删除操作
git push origin --delete <branch_name>
#直接删除远程分支
git push origin :<branch_name>
#推送一个空分支(也代表删除)
远程分支跟踪
1.分支跟踪意义
从远程分支检出的本地分支,称为跟踪分支(tracking branch)
。跟踪分支是一种和远程分支有直接联系的本地分支。务必让跟踪分支和远程分支保持同名。
在跟踪分支里输入git push
,Git会自行推断应该向哪个服务器的哪个分支推送数据。反过来,在这些分支里运行git pull
会获取所有远程索引,并把它们的数据都合并到本地分支中来。
2.查看跟踪关系
git branch -vv
#查看本地分支与远程分支追踪关系
3.自动建立跟踪关系
1.git clone
#建立本地master分支与远程master分支的跟踪关系
2.git push -u origin <branch_name>
#使用-u参数会自动建立本地指定分支与远程同名分支的追踪关系
3.git checkout -b <branch_name> origin/<remote_branch>
#会将远程指定分支与本地指定分支建立跟踪关系
4.手动建立跟踪关系
git branch --set-upstream-to origin/<branch> <branch_name>
#如果省略branch,则默认与远程的master分支建立联系
5.切断跟踪关系
如果本地分支关联的远程分支不存在了,本地分支想保留,需要切换与远程分支的联系
git branch --unset-upstream <branch_name>
#此处的分支名称为本地分支,切断本地分支的远程追踪关系
6.错误说明
在使用git push
和git pull
时,要特别注意当前分支是否建立了跟踪关系,跟踪分支名称是否相同。
比如当前在本地rxy分支,此时没有跟踪到任何远程分支,输入git push
报错,建议我们建立跟踪关系
比如当前在本地rxy分支,但是跟踪的是master分支,输入git push
报错,因为名称不匹配,建议我们指定参数推送