我已经在本地创建了一个仓库,并将所有的更改推送到github。 后来我创建了一个名为“v2”的新分支(“git branch v2”)并做了一些修改并将该分支也推送到 github。 稍后当我执行命令“git remote show origin”时,我得到以下输出。
* remote origin
Fetch URL: https://github.com/mayuran19/se24_P03.git
Push URL: https://github.com/mayuran19/se24_P03.git
HEAD branch: master
Remote branches:
master tracked
v2 tracked
Local branch configured for 'git pull':
master merges with remote master
Local refs configured for 'git push':
master pushes to master (local out of date)
v2 pushes to v2 (local out of date)
但是当我执行命令“git branch -vv”时,它显示分支“v2”不是跟踪分支。
master bad4ed9 [origin/master] Correct name
* v2 6ec46b0 Data files
我的问题是,为什么 v2 分支没有显示为跟踪分支,即使远程分支在 github 中可用并且我能够执行此分支的 pull 和推送?
命令“git branch -a”的输出显示如下输出
master
* v2
remotes/origin/master
remotes/origin/v2
但不显示本地和远程分支之间的映射。
最佳答案
首先我们需要一些定义。
本地 分支(也简称为“分支”,没有修饰符)是全名以 refs/heads/
开头的分支。 .使用 git branch
时,默认情况下您会看到本地分支机构。 git branch
命令剥离 refs/heads/
部分,给你留下像 master
这样的名字和 v2
.
remote-tracking 分支是全名以 refs/remotes/
开头的分支(然后在之后有一个 Remote 的名称)。使用 git branch -r
时,该命令将向您显示您的远程跟踪分支。 git branch -r
命令剥离 refs/remotes/
部分,给你留下像 origin/master
这样的名字和 origin/v2
.
前缀剥离是双向的:git branch
把它取下来,你也可以把它取下来。这是为了方便起见,只要您不意外地给您的(常规,本地)分支名称以 origin/
开头,它就可以正常工作。 . (例如,如果您确实不小心将本地分支命名为 origin/abc
,您可能会感到困惑,而 git 有用的前缀剥离会变得有害。)
(请注意,尽管名称为“remote-tracking”,但所有这些实体都位于您自己的存储库本地。可能还存在其他引用,您可以使用 git for-each-ref
查看所有这些实体,这将向您显示每个引用使用其全名。大多数时候你不需要这个,git branch
就足够了。)
(常规,本地)分支可以设置为跟踪另一个分支。让一个分支跟踪另一个分支可以为您做一些事情,例如 make git status
告诉你什么时候领先和/或落后,并在 git branch -vv
中包含其他分支输出。 (设置跟踪与远程跟踪分支不同。同样,本地分支是名称以 refs/heads/
开头的分支,无论是否设置为跟踪另一个分支,其名称都不会改变。但是,术语肯定令人困惑。)
要让一个分支跟踪另一个分支,首先检查第一个分支(您要进行跟踪的分支)。然后,运行 git branch --set-upstream-to <em>otherbranch</em>
.例如,制作 v2
轨道 origin/v2
:
git checkout v2
git branch --set-upstream-to origin/v2
要使本地分支跟踪另一个本地分支,只需使用本地分支名称而不是远程跟踪分支名称。要使本地分支停止跟踪任何内容,请使用 git branch --unset-upstream
.
所有这些还有一个技巧,1 那就是当你问 git checkout
时 checkout (但不创建)一个不存在的本地分支,git checkout
将搜索以查看是否存在名称相似的远程跟踪分支。如果是这样,它将创建本地分支并设置它以跟踪远程跟踪分支。也就是说,如果分支 v2
不存在——例如,如果您重命名或删除现有的本地 v2
—和origin/v2
仍然确实存在,那么:
git checkout v2
创建 本地分支 v2
并将其设置为跟踪origin/v2
, 一下子。
一个分支不需要跟踪另一个分支来推送和获取/merge/ rebase /pull ,但是将其设置为跟踪可以使所有这些操作更加方便。
1与 git 一样,实际上有更多方法可以让本地分支跟踪其他内容。您可以设置本地分支以跟踪成功的远程跟踪分支 git push
通过添加 -u
到推。您可以使用(已弃用)git branch --set-upstream
命令。您可以使用标志 git checkout
或 git branch
创建或重新创建一个带有跟踪集的分支。而且,您可以使用 git config
(使用两个单独的 git config
命令)使本地分支跟踪其他分支。
关于Git 跟踪分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36527541/