May*_*ran 2 git version-control github remote-branch branching-and-merging
我在本地创建了一个存储库并将所有更改推送到 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)
Run Code Online (Sandbox Code Playgroud)
但是当我执行命令“git branch -vv”时,它显示分支“v2”不是跟踪分支。
master bad4ed9 [origin/master] Correct name
* v2 6ec46b0 Data files
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么即使远程分支在 github 中可用并且我能够执行此分支的拉取和推送,为什么分支 v2 没有显示为跟踪分支?
命令“git branch -a”的输出显示以下输出
master
* v2
remotes/origin/master
remotes/origin/v2
Run Code Online (Sandbox Code Playgroud)
但没有显示本地和远程分支之间的映射。
首先,我们需要一些定义。
一个地方分支(也只是称为“分支”,没有修改)是一个全名打头refs/heads/。使用时git branch,默认情况下您将看到您的本地分支。该git branch命令会剥离该refs/heads/部分,为您留下诸如master和 之类的名称v2。
一个远程跟踪分支是其全名以refs/remotes/(再之后还会有一个遥控器的名称)。使用时git branch -r,该命令将显示您的远程跟踪分支。该git branch -r命令会剥离该refs/remotes/部分,为您留下诸如origin/master和 之类的名称origin/v2。
前缀剥离是双向的:git branch去掉它,你也可以去掉它。这是为了方便起见,只要您不小心给您的(常规的、本地的)分支名称以origin/. (origin/abc例如,如果你不小心命名了一个本地分支,你可能会混淆自己,而 git 有用的前缀剥离变得有害。)
(请注意,尽管名称为“远程跟踪”,但所有这些实体都是您自己的存储库的本地实体。也可能存在其他引用,您可以使用 看到所有这些实体git for-each-ref,这将使用其全名向您显示每个引用。大多数时间你不需要这个,git branch就足够了。)
可以设置(常规的、本地的)分支来跟踪另一个分支。让一个分支跟踪另一个分支可以为您做一些事情,例如 makegit status告诉您何时领先和/或落后,并在git branch -vv输出中包含另一个分支。(设置跟踪与远程跟踪分支不同。同样,本地分支是名称以 开头的分支refs/heads/,无论是否设置跟踪另一个分支,其名称都不会改变。但是,术语肯定会令人困惑.)
要使一个分支跟踪另一个分支,首先检查第一个分支(您要进行跟踪的分支)。然后,运行。例如,要进行跟踪:git branch --set-upstream-to otherbranchv2origin/v2
git checkout v2
git branch --set-upstream-to origin/v2
Run Code Online (Sandbox Code Playgroud)
要使本地分支跟踪另一个本地分支,只需使用本地分支名称而不是远程跟踪分支名称。要使本地分支停止跟踪任何内容,请使用git branch --unset-upstream.
所有这一切还有一个技巧,1即当您要求git checkout检出(但不创建)一个不存在的本地分支时,git checkout将搜索以查看是否存在具有相似名称的远程跟踪分支。如果是这样,它将创建本地分支并将其设置为跟踪远程跟踪分支。也就是说,如果分支v2 不存在-例如,如果重命名或删除现有的地方v2-和origin/v2仍然不存在,则:
git checkout v2
Run Code Online (Sandbox Code Playgroud)
一次性创建本地分支v2 并将其设置为 track origin/v2。
一个分支不需要跟踪另一个分支来推送和获取/合并/rebase/pull,但是将其设置为跟踪可以使所有这些操作更加方便。
1与 git 一样,实际上有更多方法可以使本地分支跟踪其他内容。您可以git push通过添加-u到推送来设置本地分支以在成功时跟踪远程跟踪分支。您可以使用(已弃用)git branch --set-upstream命令。您可以使用标志来git checkout或git branch创建或与跟踪集重新创建一个分支。而且,您可以使用git config(使用两个单独的git config命令)使本地分支跟踪其他分支。
| 归档时间: |
|
| 查看次数: |
1930 次 |
| 最近记录: |