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


76

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

Answers:


99

尝试以下操作(假设您正在使用masterbranch,而您的远程称为origin):

git push origin HEAD^:master

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

如果您有兴趣,可以在此手册页中找到有关指定修订的更多信息。

更新:我怀疑是这样,但是无论如何,如果最后一次提交是合并的,则应谨慎使用该命令。使用merge commit时,将HEAD HEAD^指向该提交的第一个父级,HEAD^2-指向其第二个父级,依此类推。


如果您使用的是Windows,请^通过加倍引用来引用它,否则您将推动一切:git push origin HEAD^^:master
Ferruccio

25

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 /”开头)。我们试图猜测您的意思
Kasra

10

另一种可能性是

git reset --soft HEAD^

取消提交最近的提交并将更改移到暂存。那么你也能

git push

并且只会推送其余的提交。这样,您可以在推送git log之前看到要推送的内容(通过)。


1
但是,您将丢失提交消息(有关最新的,未按下的提交)
Konrad Morawski,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.