What are the differences between local branch, local tracking branch, remote branch and remote tracking branch?
我刚开始使用git,我对不同的分支感到非常困惑。有人能帮我弄清楚下面的分支类型是什么吗?
- 当地分支机构
- 本地跟踪分支
- 远程分支
- 远程跟踪分支
他们之间有什么区别?他们是如何合作的?
我想,一个快速的演示代码会非常有用。
答案很长。好的。遥控器:
如果您正在协作使用Git,则可能需要将提交与其他计算机或位置同步。用git的术语来说,每台机器或位置都被称为远程,并且每台机器或位置可以有一个或多个分支。通常情况下,您只需要一个,名为
1 2 3 | $ git remote bitbucket origin |
您可以通过运行
1 2 3 4 5 | $ git remote -v bitbucket [email protected]:flimm/example.git (fetch) bitbucket [email protected]:flimm/example.git (push) origin [email protected]:Flimm/example.git (fetch) origin [email protected]:Flimm/example.git (push) |
每个遥控器在
1 2 | $ ls -F .git/refs/remotes/ bitbucket/ origin/ |
机器上的分支:
TLDR:在本地机器上,有三种类型的分支:本地非跟踪分支、本地跟踪分支和远程跟踪分支。在远程机器上,您只有一种类型的分支。好的。1。当地分支机构
运行
1 2 3 | $ git branch master new-feature |
每个本地分支机构在
1 2 | $ ls -F .git/refs/heads/ master new-feature |
您的计算机上有两种类型的本地分支:非跟踪本地分支和跟踪本地分支。好的。1.1非跟踪本地分支机构
非跟踪本地分支不与任何其他分支关联。通过运行
跟踪本地分支与另一个分支相关联,通常是远程跟踪分支。通过运行
您可以使用
1 2 3 | $ git branch -vv master b31f87c85 [origin/master] Example commit message new-feature b760e04ed Another example commit message |
从这个命令的输出中,可以看到本地分支
另一种查看跟踪分支的方法是查看
跟踪本地分支非常有用。它们允许您运行
1 2 3 4 5 6 7 8 9 10 11 | $ git checkout new-feature $ git pull There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details git pull <remote> <branch> If you wish to set tracking information for this branch you can do so with: git branch --set-upstream new-feature <remote>/<branch> |
2。远程跟踪分支(仍在您的计算机上)
运行
1 2 3 4 | $ git branch -r bitbucket/master origin/master origin/new-branch |
每个远程跟踪分支在
1 2 3 4 5 6 7 | $ tree -F .git/refs/remotes/ .git/refs/remotes/ ├── bitbucket/ │ └── master └── origin/ ├── master └── new-branch |
将远程跟踪分支视为远程计算机所包含内容的本地缓存。您可以使用
即使远程跟踪分支的所有数据都存储在本地计算机上(如缓存),它仍然从未被称为本地分支。(至少,我不会这么叫它!)这就是所谓的远程跟踪分支。好的。远程计算机上的分支:
通过运行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $ git remote show origin * remote origin Fetch URL: [email protected]:Flimm/example.git Push URL: [email protected]:Flimm/example.git HEAD branch: master Remote branches: io-socket-ip new (next fetch will store in remotes/origin) master tracked new-branch tracked Local ref configured for 'git pull': master merges with remote master new-branch merges with remote new-branch Local ref configured for 'git push': master pushes to master (up to date) new-branch pushes to new-branch (fast-forwardable) |
这个
从输出中,通过查看标题"远程分支"(忽略标记为"过时"的行),可以看到远程计算机上存在的所有分支。好的。
如果您可以登录到远程机器并在文件系统中找到存储库,您可以查看它在
要安全删除本地分支,无论是跟踪还是非跟踪:好的。
1git branch -d <branchname>要强制删除本地分支,无论是跟踪还是非跟踪:好的。
1git branch -d <branchname>要删除远程跟踪分支:好的。
1git branch -rd <remote>/<branchname>要创建新的本地非跟踪分支,请执行以下操作:好的。
1git branch <branchname> [<start-point>]创建一个新的本地跟踪分支:(注意,如果指定了
,并且是一个远程跟踪分支,如origin/foobar ,则会自动包含--track 标志)好的。1git branch --track <branchname> [<start-point]例子:好的。
1git branch --track hello-kitty origin/hello-kitty要删除远程计算机上的分支,请执行以下操作:好的。
1git push --delete <remote> <branchname>要删除所有过时的远程跟踪分支,即远程计算机上不再存在相应分支的位置,请执行以下操作:好的。
1git remote prune <remote>
您可能已经注意到,在某些命令中,您使用
它可能看起来很武断,但有一个简单的方法可以记住何时使用斜线,何时使用空格。当您使用斜线时,您指的是您自己机器上的远程跟踪分支,而当您使用空格时,实际上是通过网络处理远程机器上的分支。好的。好啊。
本地分支是只有您(本地用户)才能看到的分支。它只存在于您的本地计算机上。
1 | git branch myNewBranch # Create local branch named"myNewBranch" |
远程分支是远程位置上的分支(在大多数情况下为
1 2 3 4 | git push -u origin myNewBranch # Pushes your newly created local branch"myNewBranch" # to the remote"origin". # So now a new branch named"myNewBranch" is # created on the remote machine named"origin" |
远程跟踪分支是远程分支的本地副本。当使用上述命令将
1 2 3 4 5 | git pull origin myNewBranch # Pulls new commits from branch"myNewBranch" # on remote"origin" into remote tracking # branch on your machine"origin/myNewBranch". # Here"origin/myNewBranch" is your copy of #"myNewBranch" on"origin" |
本地跟踪分支是跟踪另一个分支的本地分支。这样,您就可以向另一个分支推送/拉取提交。在大多数情况下,本地跟踪分支跟踪远程跟踪分支。当您使用带有
1 2 3 4 5 6 | git checkout myNewBranch # Switch to myNewBranch git pull # Updates remote tracking branch"origin/myNewBranch" # to be in sync with the remote branch"myNewBranch" # on"origin". # Pulls these new commits from"origin/myNewBranch" # to local branch"myNewBranch which you just switched to. |
本地分支:
您机器上的一个分支,您可以在其中工作并向其添加提交。您可以使用
本地分支(带跟踪):
配置为对应于远程分支的普通本地分支。这与
远程分支:
只是远程存储库上的一个分支,通常位于Github等服务器上。
远程跟踪分支:
远程分支的本地副本。不应编辑此分支。它的目的是跟踪远程分支的当前状态。远程跟踪分支可以用