2022/12/08 1-github跟踪分支

229 阅读5分钟

首先,我们需要在本地和远程都创建一个项目,这两个项目最好同名以便于管理。例如,在github和本地都创建一个叫github-basics的仓库,在本地添加一个master文件夹和其下的m1.txt并提交。接下来就可以根据github的提示连接远程仓库了。

关联远程仓库和本地仓库

先让我们来看看新建完远程仓库之后,github给我们的提示:

// remote add 为本地仓库添加一个远程链接
// origin 给远程仓库起了一个简称,便于以后使用,可以使用其他名称
git remote add origin https://github.com/xxx/github-basics.git
// 将当前主分支名字master改为main,这一步对我来说是不必要的,将不会运行
// git branch -M main
// 由于没有使用第二条命令,所以我们的分支还是master,不是main
// -u 命令暂时不谈 git push -u origin master
// git push : 将本地数据推送到远程
// origin 我们在第一条命令中给远程仓库起的简称
git push origin master

当我们向远程推送的时候,可能会被拒绝,这时候需要我们去github申请一个 Personal access tokens 用于验证。然后github的用户名和密码就会保存在windows凭据管理器中,以便以后推送和拉取数据,不需要再使用tockens

当我们后续再向远程推送的时候,仍使用 git push origin master

远程跟踪分支

现在来深入了解一下git push origin master的背后都做了什么。首先使用git branch -a查看一下所有的分支: image.png 我们会惊奇的发现一个从未见过的分支: remotes/origin/master,这就是所谓的远程跟踪分支-远程分支的本地只读副本

或者使用git branch -r仅查看远程跟踪分支: image.png

git push origin master

  1. 当我们从本地仓库向远程仓库推送内容时,本地仓库有一个 本地master分支
  2. 然后本地仓库中会创建一个远程分支的本地只读副本 远程跟踪分支remotes/origin/master
  3. 最后才会在远程创建一个 远程master分支
  4. 这样看下来我们其实有3个master相关分支,而且本地master分支远程master分支并没有直接关联,而是通过远程跟踪分支进行关联的。 当我们有了一个远程本地分支来关联本地分支和远程分支之后,就可以同过git pull origin XXX的命令拉取远程的改动了。

git pull origin master

  1. 找到对应的远程跟踪分支,通过remotes/origin/master找到对应的远程master分支
  2. 使用 git fetch origin 命令从远程master分支拉取最新的提交到远程跟踪分支
  3. 使用 git merge 命令从远程跟踪分支合并代码到本地master分支
  4. git pull origin master 命令就是 git fetch 命令和 git merge 命令的结合。

图片来自Git&GitHub-The Practical Guide视频课程: image.png

本地跟踪分支

本地跟踪分支其实就是本地分支,只是它是基于远程跟踪分支创建的。

  1. 远程创建一个feature分支并添加feature-remote.txt文件 image.png
  2. 在本地使用git fetch拉取了一个远程feature分支的只读副本-远程跟踪分支:remotes/origin/feature。 image.png
  3. 此时我们只缺少一个同名的本地分支,所以我们可以基于只读的远程跟踪分支创建一个可编辑的本地跟踪分支:
// 这里我们将本地跟踪分支取名为feature和远程分支一致,这样方便管理。
// 但是可以取不同的名字,只是会更难以进行以后的关联。
git branch --track feature origin/feature

image.png 4. 对于本地跟踪分支,我们在使用git pullgit push的时候就可以不带上远程仓库简称和分支名了,因为我们将本地跟踪分支的名字设置和远程仓库分支名一致,所以git能找到对应的远程本地分支和远程分支。 image.png 我们可以用git branch -vv这个命令查看本地跟踪分支对应的远程跟踪分支。

总结

  1. 我们学习了四种分支: 本地分支本地跟踪分支远程跟踪分支远程分支。只有远程分支是在远程仓库上的,其他都是存在于本地仓库中的。

  2. 我们在本地直接使用git branch创建的是一个单纯的本地分支,在远程github上创建的是一个单纯的远程分支。

  3. 远程跟踪分支是远程分支的在本地的一个只读副本。生成远程跟踪分支的两种方法:

  • 将本地分支推送到远程时,使用git push origin XXX的时候会同时创建远程跟踪分支
  • 将远程分支拉取到本地时,使用git fetch或者git pull向远程拉取了远程跟踪分支。
  1. 本地跟踪分支只是基于远程跟踪分支创建的一个本地分支。 生成本地跟踪分支的方法:git branch --track XXX origin/XXX。

  2. 本地分支和远程分支的交互: git push origin XXX/git pull origin XXX

  3. 本地跟踪分支和远程分支的交互:git push/git pull

在github上创建一个分支后,git pull仅是在本地创建了一个远程跟踪分支,并未创建本地跟踪分支,但是当我们使用git checkout XXX后,会在本地生成同名的本地跟踪分支。

image.png