小编典典

你如何只推送一些本地 git 提交?

all

假设我有 5 个本地提交。我只想将其中 2 个推送到集中式仓库(使用 SVN 风格的工作流程)。我该怎么做呢?

这不起作用:

git checkout HEAD~3  #set head to three commits ago
git push #attempt push from that head

这最终推动了所有 5 个本地提交。

我想我可以执行 git reset 来实际撤消我的提交,然后是 git stash ,然后是 git push
——但是我已经编写了提交消息并组织了文件,我不想重做它们。

我的感觉是传递给 push 或 reset 的一些标志会起作用。

如果有帮助,这是我的 git 配置

[ramanujan:~/myrepo/.git]$cat config 
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = ssh://server/git/myrepo.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

阅读 90

收藏
2022-07-28

共1个答案

小编典典

假设您的提交在主分支上,并且您希望将它们推送到远程主分支:

$ git push origin master~3:master

如果您使用的是 git-svn:

$ git svn dcommit master~3

在 git-svn 的情况下,您也可以使用 HEAD~3,因为它期待提交。在直接 git 的情况下,您需要使用分支名称,因为 HEAD 在 refspec
中未正确评估。

您还可以采取更长的方法:

$ git checkout -b tocommit HEAD~3
$ git push origin tocommit:master

如果您正在养成这种类型的工作流程的习惯,您应该考虑在单独的分支中进行工作。然后你可以做类似的事情:

$ git checkout master
$ git merge working~3
$ git push origin master:master

请注意,“origin master:master”部分对于您的设置可能是可选的。

2022-07-28