本地分支与远程分支存可以设定追踪关系,一般git clone后,本地分支会与远程同名分支建立追踪关系。可以为不同名分支建立追踪关系。
git fetch
从远程仓库下载本地仓库缺少的所有提交,并更新所有远程分支指针,但是不更新本地分支的指针。后续可以使用checkout创建新分支或者merge合并到其他分支。
实际上是将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态,而远程分支是远程仓库与本地仓库最后一次通信的状态,所以git fetch是本地仓库与远程仓库的通信方式。
完整格式:git fetch <远程主机> <远程分支名> :<本地分支名>,将远程主机的指定分支的更新获取到本地指定分支。当本地分支不追踪远程分支时,会更新本地分支名的引用。
git fetch origin originSourceBranch:localTargetBranch
git fetch origin master:获取origin主机的master分支的代码。
git fetch origin :branch: 表示新建本地分支
格式:git fetch <远程主机>:省略远程分支名,表示获取远程主机所有分支的更新。
git checkout -b newBranch origin/master:基于origin/master创建新分支。
git merge origin/master:把origin/master合并到当前分支。
git pull
下载远程仓库的指定分支的提交,并合并到指定的本地分支。
如果没有本地分支,会先新建。如果本地分支和当前检出分支不同,那么会再合并到当前检出分支。相当于git fetch+git merge。
完整格式:git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin next:master :获取远程主机origin的next分支到代码,并合并到本地master分支,当前分支可以不是next分支或master分支。
格式:git pull <远程主机名> <远程分支名> 省略本地分支,表示与当前分支合并。
git pull origin next:获取远程主机origin的next分支到代码,并合并到当前分支。相当于git fetch origin,git merge origin/next。
格式:git pull <远程主机名> 当前分支与远程主机存在追踪关系时,可以省略远程分支名。表明拉取与当前分支存在追踪关系的远程分支。
格式:git pull 当前分支在所有远程主机中只存在一个追踪关系时,可以省略远程主机名。
格式:git pull --rebase,相当于git fetch+git rebase
git push
将分地分支的提交,推送到远处主机的指定分支。如果不存在远程分支,那么新建远程分支。
完整格式:git push <远程主机名> <本地分支名>:<远程分支名>
格式:git push <远程主机名> <本地分支名>,省略远程分支名,把本地分支推送到它追踪的远程分支,没有则新建。
格式:git push <远程主机名> ,如果当前分支和远程分支有追踪关系,那么可以省略本地和远程分支名。
格式:git push ,如果当前分支只有一个追踪分支,那么远程主机名也能省略。
格式:git push origin :branch,表示删除本地的远程分支和远程仓库的分支