【问题标题】:Can git know which branch your current branch was branched from?git 能知道你当前的分支是从哪个分支分支出来的吗?
【发布时间】:2017-06-21 04:05:48
【问题描述】:

我想创建一个 git 别名,让我可以从原来的分支同步我的分支。

例如,如果我从 <branch A> 分支,是否有办法让 git 别名识别它需要从 origin/<branch A> 拉取才能同步?

【问题讨论】:

  • origin/<branch A>是父分支吗?
  • 是的。 origin/<branch A> 将是 <local branch> 的父分支。所以运行别名会将<origin/branch A> 合并到<local branch>
  • 当出现在<local branch> 中时,为什么不从<origin/branch A> 进行简单的合并?
  • 这就是我目前正在做的,但是我工作的地方有相当长的分支名称前缀,所以如果有办法只使用git sync而不是git merge origin/<branch A>,那会很方便.
  • git 通常没有任何方法可以做到这一点。如果您对分支起源做出假设,您也许可以在某些有限的情况下做到这一点。但是,给定任意分支AB,所有git 都可以真正说出它们是否有一个或多个共同祖先,或者它们没有——没有任何关于A 是否从@987654337 分支的存储@ 或者 B 是从 A 分支出来的,或者两者都是从 C 分支出来的,这已经被删除了......

标签: git bash alias


【解决方案1】:

Git 不知道也不关心一个分支名称,如masterfeature-31415ourDevelopmentProcessUsesReallyLongBranchNamesBecauseTheyHateUs,是如何产生的。它所知道或关心的只是名称存在并且当前指向某个特定的提交。尽管如此,每个分支都可以有一个 upstream 设置。

如果您在不带参数的情况下运行git merge,您配置的上游将作为合并参数,或者如果您不带参数运行,则将其用作git rebase<upstream> 参数,依此类推。通常master 的上游是origin/master。您可以将sbr(短分支)设置为将origin/anotherLongNameBecauseTheyWantToReplaceUsWithRobots 作为其上游,而无需再次输入。

origin/zorg 设置为evil 的上游:

git branch --set-upstream-to=origin/zorg evil

并删除上游:

git branch --unset-upstream evil

上游设置只是一个由两部分组成的字段:

$ git config --get branch.master.remote
origin
$ git config --get branch.master.merge
master

这就是masterorigin/master 作为其上游的方式和原因。1上游也被git status 自动使用,并且是git push 的默认推送目标,并且是将@{upstream} 应用于分支名称的结果。这一切都内置在 Git 中。问题是每个分支只有一个上游。如果这就是你所需要的,那你很好。

您可以添加自己的配置项,例如:2

$ git config branch.master.zorblax giant-space-eel

但 Git 本身不会使用它。尽管如此,Git 仍然是一个巨大的工具集,而不仅仅是一个预先消化的解决方案,它永远不能用于其开发人员直接想象之外的任何事情:您可以编写使用zorblax 设置的自己的代码,如果你喜欢。


1您可以将本地分支设置为另一个本地分支的上游。在配置方面,这会将 remote 部分设置为 .,然后 Git 的其余部分会在必要时忽略它,例如,为了象征性地显示 @{upstream} 设置。

这里还有一个隐藏细节与分支名称映射有关,当remote 设置为远程名称时。这是因为merge 设置的原始值早于遥控器的发明。不过,通常这没什么区别。

2President Zorblax。注意漫画的日期,十多年前。不过,我怀疑红色按钮文本较新....

【讨论】:

  • 您可以轻松跟踪本地分支机构。
  • @jthill:是的,我想提一下,但对于他的特殊用途来说似乎有点偏离目标。不过,我会将其添加到脚注 1。
猜你喜欢
  • 2011-02-22
  • 2013-11-04
  • 2019-04-30
  • 2011-08-28
  • 1970-01-01
  • 2013-09-30
  • 2014-09-19
  • 2013-07-13
  • 2011-02-15
相关资源
最近更新 更多