有没有一种方法可以将我本地的所有提交推送到远程存储库,除了最近的一个提交?如果需要修改,我想在本地保留最后一个提交。
有没有一种方法可以将我本地的所有提交推送到远程存储库,除了最近的一个提交?如果需要修改,我想在本地保留最后一个提交。
尝试以下操作(假设您正在使用 master
分支且您的远程仓库名为 origin
):
git push origin HEAD^:master
HEAD^
指向当前分支上最后一次提交之前的提交记录(最后一次提交可以用HEAD
表示),所以这个命令将此提交(包括所有之前的提交)推送到远程的origin/master
分支。
如果您感兴趣,可以在这个页面中了解更多关于指定修订版本的信息。
更新:虽然我认为这种情况不太可能发生,但是如果您的最后一次提交是合并提交,在使用该命令时需要小心。对于合并提交的HEAD
,HEAD^
指的是该提交的第一个父提交,HEAD^2
则指的是该提交的第二个父提交,以此类推。
一种更普遍的方法是通过指定提交哈希来推送
到特定的提交。
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
另一个可能性是
git reset --soft HEAD^
撤消您最近的提交并将更改移至暂存区。然后您可以
git push
它只会推送剩余的提交。这样,在推送之前,您可以通过git log
查看将要被推送的内容。
^
用两个引起来,否则你会把所有东西都推送出去:git push origin HEAD^^:master
。 - Ferrucciozsh: no matches found: HEAD^:master
。如果你使用 zsh(或启用了 EXTENDED_GLOB),你需要转义插入符号:\^
。 - Codygit push HEAD^
命令即可? - Herr Derb