git push:推送除最后一个提交之外的所有提交

时间:2012-01-16 11:30:03

标签: git push

有没有办法将我的所有本地提交推送到远程存储库,除了最新的?我想在本地保留最后一个,以防万一我需要修改。

3 个答案:

答案 0 :(得分:78)

试试这个(假设你正在使用master分支而你的远程调用origin):

git push origin HEAD^:master

HEAD^指向当前分支中最后一个提交之前的提交(最后一次提交可以称为HEAD),因此该命令将此提交(包含所有先前的提交)推送到远程{{ 1}}分支。

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

更新:我怀疑是这种情况,但无论如何,如果您的上次提交是合并,则应该小心该命令。使用origin/master HEAD中的合并提交是指该提交的第一个父级HEAD^ - 指向其第二个父级,等等。

答案 1 :(得分:8)

另一种可能性是

git reset --soft HEAD^

取消提交您最近的提交并将更改移至暂存状态。那你可以

git push

它只会推送剩余的提交。通过这种方式,您可以在推送之前看到将推送的内容(通过git log)。

答案 2 :(得分:5)

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