【发布时间】:2012-01-16 11:30:03
【问题描述】:
有没有办法将我所有的本地提交推送到远程存储库除了最近的提交?我想将最后一个保留在本地,以备不时之需。
【问题讨论】:
有没有办法将我所有的本地提交推送到远程存储库除了最近的提交?我想将最后一个保留在本地,以备不时之需。
【问题讨论】:
试试这个(假设你正在使用master 分支并且你的遥控器被称为origin):
git push origin HEAD^:master
HEAD^ 指向当前分支中最后一个提交之前的提交(最后一个提交可以称为HEAD),因此此命令将此提交(连同所有先前的提交)推送到远程origin/master 分支。
如果您有兴趣,可以在this man page 中找到有关指定修订的更多信息。
更新:我怀疑是这种情况,但无论如何,如果您的最后一次提交是合并,您应该小心该命令。 HEAD 中的合并提交 HEAD^ 指的是该提交的第一个父项,HEAD^2 - 指的是它的第二个父项,等等。
【讨论】:
^ 加倍引用,否则您将最终推动所有内容:git push origin HEAD^^:master
zsh: no matches found: HEAD^:master。如果您使用 zsh(或启用了 EXTENDED_GLOB),则需要转义插入符号:\^
对push 直到某个提交有效的更通用方法是指定提交哈希。
git push <remote> <commit hash>:<branch>
例如,如果您有这些提交:111111 222222333333444444555555666666
git push origin 555555:master
.. 将除了你最后一次提交之外的所有内容推送到你的远程master 分支,并且
git push origin 333333:myOtherBranch
..将提交到333333 并包括到您的远程分支myOtherBranch
【讨论】:
另一种可能是
git reset --soft HEAD^
取消提交您最近的提交并将更改移至暂存状态。然后就可以了
git push
它只会推送剩余的提交。这样你就可以在推送之前看到将要推送的内容(通过git log)。
【讨论】: