- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我可以运行这些命令并获得预期的输出
$ git branch --track test
$ git checkout test
$ touch hello.txt
$ git add hello.txt
$ git commit -m hello.txt
$ git status
On branch test
Your branch is ahead of 'master' by 1 commit.
然而这是我的问题所在
$ git checkout master
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
我想知道我是否领先于origin/master
,但我也想知道我是否领先于origin/master
在 test
后面。我正在寻找一个命令来给我这样的东西:
On branch master
Your branch is up-to-date with 'origin/master'.
Your branch is behind 'test' by 1 commit, and can be fast-forwarded.
最佳答案
没有内置这样的东西,跟踪只存储在另一个方向:“X tracks Y”,而不是“Y is tracked by ...”,这比“...”部分更复杂可以扩展到多个项目。 (另外,我认为 Y 更典型的是首先是一个远程跟踪分支,在这种情况下你永远不可能在 Y 上——尽管一个试图找到“Y 的轨道”的命令肯定会采取参数,所以你可以说“告诉我关于我跟踪 origin/master
的任何分支”。
也就是说,构建这样的东西当然是可能的。该算法在 Python 风格的伪代码中看起来像这样:
table = {}
for branch in local_branches:
try:
remote, tracked = get_what_branch_tracks(branch)
except ValueError:
continue # local branch "branch" not tracking anything
try:
br2 = analyze(branch, remote, tracked)
except ValueError:
warn('upstream for %s is gone' % branch)
continue
# at this point br2 is, e.g., origin/master or a local branch that "branch" tracks
table.setdefault(br2, []).append(branch)
# now table[] is a table of branches that are tracked, with
# each table[key] being the branches that track branch "key"
现在对于 table
中的任何有趣的分支,您只需计算在各个分支对中可找到的修订,方法相同 git status
确实如此,在 shell 中只是:
# to compute "git status" for branch X that tracks Y:
nahead=$(git rev-list --count Y..X) # we're ahead $nahead commits
nbehind=$(git rev-list --count X..Y) # and behind $nbehind
如果你落后但不领先,你可以快进。
get_what_branch_tracks
的详细信息只是做一些git config --get
s,属于 branch.<em>branch</em>.remote
和 branch.<em>branch</em>.merge
, 而详细信息为 analyze
更复杂:如果 remote
是.
然后 tracked
中的任何内容很简单,但如果它是一个真正的 Remote ,则 tracked
中的任何内容必须通过对应的fetch
行来找到合适的远程跟踪分支。
关于上游和下游的 Git 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27716781/
我正在使用 Jenkins 进行持续集成。我创建了单独的 View ,例如服务器 A 的 View A 、服务器 B 的 View B 等。 每个 View 都会根据服务器的环境属性构建我的项目。 但
我有以下伪代码: var queue = new BufferBlock(new DataflowBlockOptions { BoundedCapacity = 5 }); var a = new
我想这样做,但是在 Jenkins DSL 中: 如果在某个地方找到了这个,但它不工作: job('ps-first') { steps { shell('echo "landing"') }
我们的 API 中有一个路由(在调用时)会访问另一个第 3 方 API。 例如 HTTP-GET/account/1 这会从我们的数据库返回一些数据,并从.. 说 .. 像 Auth0/Okta/Sa
我是一名优秀的程序员,十分优秀!