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

pyt*_*ude 62 git push

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

KL-*_*L-7 85

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

git push origin HEAD^:master
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 如果您使用的是 Windows,请通过将其加倍来引用“^”,否则您将最终推送所有内容:“git push origin HEAD^^:master” (2认同)
  • 我得到“zsh:未找到匹配项:HEAD ^:master”。如果您使用 zsh(或启用了 EXTENDED_GLOB),则需要转义插入符:`\^` (2认同)

She*_*man 12

一种更通用的方法,用于push达到某个提交,是指定提交哈希.

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

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

git push origin 555555:master
Run Code Online (Sandbox Code Playgroud)

..除了你最后一次提交到你的远程master分支,都会推送,并且

git push origin 333333:myOtherBranch  
Run Code Online (Sandbox Code Playgroud)

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


Jar*_*ard 9

另一种可能性是

git reset --soft HEAD^
Run Code Online (Sandbox Code Playgroud)

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

git push
Run Code Online (Sandbox Code Playgroud)

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

  • 不过,您将丢失提交消息(最新的、未推送的提交) (2认同)