Answers:
一个地方分支的一个分支,只有你(本地用户)可以看到。它仅存在于本地计算机上。
git branch myNewBranch # Create local branch named "myNewBranch"
甲远程分支是上远程位置处的分支(在大多数情况下origin
)。您可以将新创建的本地分支推myNewBranch
送到origin
。现在其他用户可以跟踪它。
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"
一个远程跟踪分支是远程分支的本地副本。当myNewBranch
推到origin
使用上面的命令,命名为远程跟踪分支origin/myNewBranch
是你的机器上创建的。这种远程跟踪分支追踪远程分支myNewBranch
上origin
。您可以使用或更新远程跟踪分支,使其与远程分支同步。git fetch
git pull
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"
一个地方跟踪分支是本地分支,其跟踪的另一个分支。这样,您就可以向/从另一个分支推/拉提交。在大多数情况下,本地跟踪分支会跟踪远程跟踪分支。当您将本地分支推送到origin
使用git push command
带有-u
选项的时(如上所示),可以将本地分支设置myNewBranch
为跟踪远程跟踪分支origin/myNewBranch
。需要使用它git push
,git pull
而没有指定要推入或拉出的上游。
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.
这是很长的答案。
如果您正在协同使用Git,则可能需要将提交与其他计算机或位置同步。在Git的术语中,每台机器或位置都称为remote,并且每台机器或位置可能都有一个或多个分支。通常,您只有一个名为origin
。要列出所有遥控器,请运行git remote
:
$ git remote
bitbucket
origin
通过运行以下命令,您可以查看这些远程名称在哪些位置是快捷方式git remote -v
:
$ git remote -v
bitbucket git@bitbucket.org:flimm/example.git (fetch)
bitbucket git@bitbucket.org:flimm/example.git (push)
origin git@github.com:Flimm/example.git (fetch)
origin git@github.com:Flimm/example.git (push)
每个遥控器在git/refs/remotes/
以下位置都有一个目录:
$ ls -F .git/refs/remotes/
bitbucket/ origin/
TLDR:在本地计算机上,您具有三种类型的分支:本地非跟踪分支,本地跟踪分支和远程跟踪分支。在远程计算机上,您只有一种类型的分支。
您可以通过运行git branch
以下命令查看计算机上所有本地分支的列表:
$ git branch
master
new-feature
每个本地分支在.git/refs/heads/
以下位置都有一个文件:
$ ls -F .git/refs/heads/
master new-feature
您的计算机上有两种本地分支:非跟踪本地分支和跟踪本地分支。
非跟踪本地分支不与任何其他分支关联。您可以通过运行创建一个git branch <branchname>
。
跟踪本地分支与另一个分支(通常是远程跟踪分支)相关联。您可以通过运行创建一个git branch --track <branchname> [<start-point>]
。
您可以使用以下命令查看本地分支中的哪一个正在跟踪分支git branch -vv
:
$ git branch -vv
master b31f87c85 [origin/master] Example commit message
new-feature b760e04ed Another example commit message
从此命令的输出中,您可以看到本地分支master
正在跟踪remote-tracking分支origin/master
,而本地分支new-feature
没有跟踪任何内容。
查看哪些分支跟踪分支的另一种方法是查看.git/config
。
跟踪本地分支机构很有用。它们允许您运行git pull
和git push
,而无需指定使用哪个上游分支。如果未将分支设置为跟踪另一个分支,则会收到类似以下的错误:
$ 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>
您可以通过运行git branch -r
以下命令查看计算机上所有远程跟踪分支的列表:
$ git branch -r
bitbucket/master
origin/master
origin/new-branch
每个远程跟踪分支在.git/refs/<remote>/
以下位置都有一个文件:
$ tree -F .git/refs/remotes/
.git/refs/remotes/
├── bitbucket/
│ └── master
└── origin/
├── master
└── new-branch
将远程跟踪分支视为远程计算机包含的本地缓存。您可以使用更新的远程跟踪分支git fetch
,其git pull
幕后的用途。
即使远程跟踪分支的所有数据都存储在本地计算机上(例如缓存),它仍然永远不会称为本地分支。(至少,我不会这样称呼!)它只是一个远程跟踪分支。
您可以通过运行git remote show <remote>
以下命令查看所有远程分支(即,远程计算机上的分支):
$ git remote show origin
* remote origin
Fetch URL: git@github.com:Flimm/example.git
Push URL: git@github.com: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)
此git remote
命令通过网络查询远程计算机有关其分支的信息。它不更新你的本地计算机上,使用远程追踪分支git fetch
或git pull
为。
从输出中,通过查看标题“远程分支”下的内容(忽略标记为“陈旧”的行),可以查看远程计算机上存在的所有分支。
如果您可以登录到远程计算机并在文件系统中找到存储库,则可以查看其下的所有分支refs/heads/
。
要安全删除本地分支(无论是跟踪还是非跟踪):
git branch -d <branchname>
要强制删除本地分支(无论是跟踪还是非跟踪):
git branch -D <branchname>
删除远程跟踪分支:
git branch -rd <remote>/<branchname>
要创建一个新的本地非跟踪分支:
git branch <branchname> [<start-point>]
要创建新的本地跟踪分支:(请注意,如果<start-point>
指定了并且是,例如origin/foobar
,是一个远程跟踪分支,则该--track
标志会自动包含在内)
git branch --track <branchname> [<start-point]
例:
git branch --track hello-kitty origin/hello-kitty
要删除远程计算机上的分支:
git push --delete <remote> <branchname>
要删除所有陈旧的远程跟踪分支,也就是说,远程计算机上的相应分支不再存在,请执行以下操作:
git remote prune <remote>
您可能已经注意到,在某些命令中,您使用了<remote>/<branch>
,而在其他命令中,使用了<remote> <branch>
。示例:git branch origin/hello-kitty
和git push --delete origin hello-kitty
。
似乎是任意的,但是有一种简单的方法可以记住何时使用斜杠以及何时使用空格。当使用斜杠时,是指自己计算机上的远程跟踪分支,而当使用空格时,实际上是在通过网络处理远程计算机上的分支。
当地分公司:
您可以在其中工作并向其添加提交的计算机上的分支。您可以使用列出这些分支git branch
。
本地分支机构(带跟踪):
普通本地分支,配置为与远程分支相对应。这有类似的能力,benfits git pull
和git push
而不必指定库和分行名称。跟踪还会使git status
您的分支机构位于遥控器的前面或后面时通知您。
远程分支:
只是远程存储库上的一个分支-通常在GitHub等服务器上。
远程跟踪分支:
远程分支的本地副本。永远不要编辑此分支。其目的是跟踪远程分支的当前状态。可以使用查看远程跟踪分支,git branch -r
并且通常看起来类似于origin/master
(回购名称,后跟一个斜杠,然后是分支名称)。运行git fetch
将更新远程跟踪分支,以反映相应远程分支的状态。
git branch -avv
是我个人的最爱,它显示了我的计算机上哪些分支,远程上哪些分支以及每个分支中的最新提交的快速概览。该-a
部分指定应显示所有分支(远程和本地)。在v
“论最终立场冗长(它显示了最后一次提交的散列和消息)。感谢@Flimm指出第二个v
添加了有关哪个本地分支正在跟踪哪个远程的信息。