指定相对于上游分支的第n个未完成的git提交

时间:2015-02-16 19:32:37

标签: git

当我正在阅读git: push a single commit并考虑小批量推送提交时,我开始想知道是否可以指定相对于我想要立即推送的提交数量的本地修订。

例如,假设我有12个未完成的提交要推送。我可以使用HEAD~9推送前3个未完成的提交;要推动下一个3,我必须使用HEAD~6等等。但我希望能够使用我的shell历史记录,而无需为每个批次编辑它。

$ git log --oneline myremote/mybranch..mybranch
0a594a4 Blah blah 12
9a4b42e Blah blah 11
d81227e Blah blah 10
803f1d3 Blah blah 9
aa7dcbc Blah blah 8
fc410e6 Blah blah 7
d57198e Blah blah 6
75f8ed6 Blah blah 5
4e801b4 Blah blah 4
7333461 Blah blah 3
3bc453e Blah blah 2
562690f Blah blah 1

显然我可以使用git push myremote 7333461:mybranch推送1-3,我也可以使用HEAD~9:mybranch,但有没有办法说出类似myremote/mybranch+3的内容,以获得相同的哈希值?我用rev-parse尝试的所有内容都会让我倒退,相对于 HEAD myremote / mybranch (当它完全有效时)。

1 个答案:

答案 0 :(得分:2)

坏消息是,由于Git提交结构只知道其父级,因此不能等待向前看的HEAD ^。抱歉。您可以编写一个实用程序来执行此操作。

它必须有一个地方可以从中看到过去。你可以通过从每个分支或标记返回直到你找到HEAD来完成这个,但这可能需要完整的树遍历(不像你想的那么低效)和模棱两可。

但是,您的具体问题有一个问题。您可以从当前分支的远程分支which is available as @{u}(“u”表示“上游”)向后看。将此程序作为git-unpushed-ref或其他内容放入PATH中。

#!/bin/sh

NUMBER=$1

git log --pretty=format:%H @{u}..HEAD | tail -n$NUMBER | head -n1

现在你可以编写git push origin $(git unpushed-ref 3):master或者围绕它构建一个小的shell包装。