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



当我阅读git:推送单个提交并考虑小批量推送提交时,我开始怀疑是否可以指定相对于我想一次推送的提交数量的本地修订。

例如,假设我有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(当它有效时)。

坏消息是,不可能有一个类似于HEAD^的前瞻性结构,因为Git提交结构只知道它的父结构。很抱歉你可以写一个实用程序来做到这一点。

它必须有一个可以回顾过去的地方。可以通过从每个分支或标记返回直到找到HEAD来实现这一点,但这可能需要完整的树遍历(并不像你想象的那样低效)和模糊性。

然而,你的具体问题有一个婴儿床。您可以从当前分支的远程分支向后看,该分支可用作@{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包装器。

最新更新