【问题标题】:git push: Push all commits except the last onegit push:推送除最后一个之外的所有提交
【发布时间】:2012-01-16 11:30:03
【问题描述】:

有没有办法将我所有的本地提交推送到远程存储库除了最近的提交?我想将最后一个保留在本地,以备不时之需。

【问题讨论】:

    标签: git push


    【解决方案1】:

    试试这个(假设你正在使用master 分支并且你的遥控器被称为origin):

    git push origin HEAD^:master
    

    HEAD^ 指向当前分支中最后一个提交之前的提交(最后一个提交可以称为HEAD),因此此命令将此提交(连同所有先前的提交)推送到远程origin/master 分支。

    如果您有兴趣,可以在this man page 中找到有关指定修订的更多信息。

    更新:我怀疑是这种情况,但无论如何,如果您的最后一次提交是合并,您应该小心该命令。 HEAD 中的合并提交 HEAD^ 指的是该提交的第一个父项,HEAD^2 - 指的是它的第二个父项,等等。

    【讨论】:

    • 如果您在 Windows 上,请使用将 ^ 加倍引用,否则您将最终推动所有内容:git push origin HEAD^^:master
    • 我收到了zsh: no matches found: HEAD^:master。如果您使用 zsh(或启用了 EXTENDED_GLOB),则需要转义插入符号:\^
    【解决方案2】:

    push 直到某个提交有效的更通用方法是指定提交哈希。

    git push <remote> <commit hash>:<branch>

    例如,如果您有这些提交:
    111111
    222222
    333333
    444444
    555555
    666666

    git push origin 555555:master
    

    .. 将除了你最后一次提交之外的所有内容推送到你的远程master 分支,并且

    git push origin 333333:myOtherBranch  
    

    ..将提交到333333 并包括到您的远程分支myOtherBranch

    【讨论】:

    • 错误:您提供的目的地不是完整的 refname(即,以“refs/”开头)。我们试图猜测您的意思
    【解决方案3】:

    另一种可能是

    git reset --soft HEAD^
    

    取消提交您最近的提交并将更改移至暂存状态。然后就可以了

    git push
    

    它只会推送剩余的提交。这样你就可以在推送之前看到将要推送的内容(通过git log)。

    【讨论】:

    • 你会丢失提交信息(最新的,未推送的提交)
    猜你喜欢
    • 2015-02-18
    • 2015-01-16
    • 1970-01-01
    • 2013-10-05
    • 2017-10-04
    • 2017-04-03
    • 2013-04-08
    • 1970-01-01
    • 2016-08-09
    相关资源
    最近更新 更多