Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Git中,本地分支可以相互跟踪-这有什么用处?_Git_Branch - Fatal编程技术网

在Git中,本地分支可以相互跟踪-这有什么用处?

在Git中,本地分支可以相互跟踪-这有什么用处?,git,branch,Git,Branch,我听说在Git中,您可以让a本地分支a跟踪另一个本地分支B 为什么有人要这样做?我能想到的一个例子是,如果您有一个“稳定”的分支。然后,如果您可以创建一个新的分支,例如“实验”,并让它跟踪稳定的分支,那就太好了 git checkout --track -b experiment stable * do some experiments with some commits * git push 除此之外,它可能是为了一致性(这只是一个猜测) 让一个本地分支跟踪另一个本地分支需要考虑的主要问题是

我听说在
Git
中,您可以让a
本地分支a
跟踪另一个
本地分支B


为什么有人要这样做?

我能想到的一个例子是,如果您有一个“稳定”的分支。然后,如果您可以创建一个新的分支,例如“实验”,并让它跟踪稳定的分支,那就太好了

git checkout --track -b experiment stable
* do some experiments with some commits *
git push

除此之外,它可能是为了一致性(这只是一个猜测)

让一个本地分支跟踪另一个本地分支需要考虑的主要问题是:(1)来自Git的关于一个分支位于被跟踪分支的前面/后面的消息,以及(2)触发器挂钩

Git显示更多信息的一个区域是在创建分支时。创建一个类似于以下内容的文件:

$ git co -b A master
Switched to a new branch 'A'
当创建一个类似于:

$ git co --track -b B master
Branch B set up to track local branch master.
Switched to a new branch 'B'
这将在
.git/config
中添加以下内容:

[branch "B"]
    remote = .
    merge = refs/heads/master
在分支
A
B
上提交一些更改后,在分支
A
上执行
git status-s-B
显示
#A
,而在分支
B
上显示
#B…master[前1,后1]
,提供有关分支
B
master
之间关系的一些快速信息


您可能希望本地分支跟踪另一个本地分支的另一个区域是触发;特别是在一个过程中,
预接收
更新
后接收
后更新
。您可能有钩子,例如,触发持续集成服务器上的构建,执行一些许可证头检查,检查空白格式错误,等等。

请注意,只有在branch.B.merge配置被严格定义时,由第一个分支跟踪的一个分支“
B
”和另一个分支“
A
”之间的前/后信息才起作用:
refs/heads/master

如果它松散地定义:“
master
”,它将无法工作

但在Git 2.3.0(2015年第1季度)的帮助下,这也会起作用

签出设置为在另一分支上构建的分支时 分支(通常是远程跟踪分支),“
git checkout
”报告如何 你的工作与另一个部门有关

早在引入此功能时,这仅适用于构建在远程跟踪分支上的分支,但(当
--tracked
,2009-04-01,git 1.6.3)增加了对构建在其他本地分支上的分支提供相同报告的支持(即其
分支。*.remote
变量设置为“
”的分支)。
但是,与对基于远程跟踪分支的分支的支持不同,没有考虑到
branch.*.merge
配置允许记录缩短的分支名称

branch.*.merge
设置为“
master
”(而不是“
refs/heads/master
”)时,即“我的分支建立在本地“master”分支上”,这会导致“
git checkout
”报告:

上游是我们的存储库,肯定不会消失,所以 输出是胡说八道


在很多情况下,跟踪另一个本地分支是有用的。例如,在一些git工作流中,存在某种保护master不直接接收推送请求的措施。一个例子是代码审查或持续集成系统,在提交登录到远程分支之前必须通过。另一个例子是当项目由一组只接受拉请求的提交人管理(GitHub项目通常会这样做)。作为一名开发人员,我可能想创建一个功能分支,然后提交该分支以供审查(或向repo提交拉请求)。然后,我可能希望继续本地开发,同时我的队友异步检查我的代码并完成CI生成。若要在上一次提交的基础上继续开发,我可以创建第二个本地分支,跟踪我的第一个本地分支。这允许我从第一次提交开始生成,即使该提交尚未完成上游远程分支。此外,如果有人建议对我的第一个分支进行代码检查更改,或者CI构建失败,我可以更新该分支,然后将这些更改重新定基到下游本地分支。下面是如何设置分支以跟踪另一个本地分支

给定一个本地特征分支:

$ git co -b branch-1
$ git branch -u origin/master
Switched to a new branch 'branch-1'
$ git branch -vv
* branch-1                9f0c361 [origin/master] Some commit message
  master                  85ede1a [origin/master] Some commit message
这表明本地跟踪分支
master
branch-1
都跟踪
origin
远程上的
master
分支。我现在可以创建另一个分支,并将其设置为跟踪本地跟踪分支
branch-1

$ git co -b branch-2
Switched to a new branch 'branch-2'
$ git branch -u branch-1 branch-2
Branch branch-2 set up to track local branch branch-1 by rebasing.
$ git branch -vv
  branch-1                85ede1a [origin/master] Some commit message
* branch-2                85ede1a [branch-1] Some commit message
  master                  85ede1a [origin/master] Some commit message

这并不能解决一个本地分支跟踪另一个本地分支的问题。如果您有分支
A
B
,您将创建一个分支
C
,使用
git checkout--track-B C B
,跟踪
B
。请参阅和。似乎您是对的:-)我记错了:“当起点是远程跟踪分支时,此行为是默认行为。”我将立即编辑我的帖子。谢谢。注意:Git 2.3.0(2015年第1季度)提高了此功能的健壮性。请参阅
$ git co -b branch-1
$ git branch -u origin/master
Switched to a new branch 'branch-1'
$ git branch -vv
* branch-1                9f0c361 [origin/master] Some commit message
  master                  85ede1a [origin/master] Some commit message
$ git co -b branch-2
Switched to a new branch 'branch-2'
$ git branch -u branch-1 branch-2
Branch branch-2 set up to track local branch branch-1 by rebasing.
$ git branch -vv
  branch-1                85ede1a [origin/master] Some commit message
* branch-2                85ede1a [branch-1] Some commit message
  master                  85ede1a [origin/master] Some commit message