在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