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

pyt*_*ude 21 git branch

我听说Git,你可以local branch A跟踪另一个local branch B.

为什么有人想这样做?

Dan*_*ruz 13

让本地分支跟踪另一个本地分支时想到的主要事项是(1)来自Git的关于分支在被跟踪分支的前面/后面的分支和(2)触发钩子的更多知情消息.

一个区域Git在创建分支时显示更多信息.创建基本分支如下所示:

$ git co -b A master
Switched to a new branch 'A'
Run Code Online (Sandbox Code Playgroud)

创建跟踪分支时看起来像:

$ git co --track -b B master
Branch B set up to track local branch master.
Switched to a new branch 'B'
Run Code Online (Sandbox Code Playgroud)

这将添加以下内容.git/config:

[branch "B"]
    remote = .
    merge = refs/heads/master
Run Code Online (Sandbox Code Playgroud)

在分支上提交一些更改A并在分支显示上B执行时,它会显示分支显示,提供有关分支和之间关系的一些快速信息.git status -s -bA## AB## B...master [ahead 1, behind 1]Bmaster

您可能希望本地分支跟踪另一个本地分支的另一个区域是触发挂钩 ; 特别是pre-receive,update,post-receivepost-update期间git push.例如,您可能有钩子触发持续集成服务器上的构建,执行一些许可证标头检查,检查空白格式错误等.


jse*_*ars 6

在很多情况下,跟踪另一个本地分支很有用。例如,在某些git工作流程中,有一些措施可以保护master避免直接接收推送请求。一个示例是代码审查或持续集成系统,必须在提交提交到远程分支之前通过审核。另一个示例是当一个项目由一组仅接受拉取请求的提交者管理时(GitHub项目经常这样做)。作为开发人员,我可能想创建一个功能分支,然后将该分支提交以供审查(或向回购提交者提交拉取请求)。然后,当我的队友异步检查我的代码并且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
Run Code Online (Sandbox Code Playgroud)

这表明本地跟踪分支,master并且branch-1都跟踪远程master分支origin。现在,我可以创建另一个分支,并将其设置为跟踪本地跟踪分支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
Run Code Online (Sandbox Code Playgroud)


Rey*_*les 3

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

git checkout --track -b experiment stable
* do some experiments with some commits *
git push
Run Code Online (Sandbox Code Playgroud)

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