假设我有 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
假设您的提交在主分支上,并且您希望将它们推送到远程主分支:
$ 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”部分对于您的设置可能是可选的。