Suppose I have 5 local commits. I want to push only 2 of them to a centralized repo (using an SVN-style workflow). How do I do this?
This did not work:
git checkout HEAD~3 #set head to three commits ago
git push #attempt push from that head
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
url = ssh://server/git/myrepo.git
fetch = +refs/heads/*:refs/remotes/origin/*
remote = origin
merge = refs/heads/master
Assuming your commits are on the master branch and you want to push them to the remote master branch:
$ git push origin master~3:master
If you were using git-svn:
$ git svn dcommit master~3
In the case of git-svn, you could also use HEAD~3, since it is expecting a commit. In the case of straight git, you need to use the branch name because HEAD isn't evaluated properly in the refspec.
You could also take a longer approach of:
$ git checkout -b tocommit HEAD~3 $ git push origin tocommit:master
If you are making a habit of this type of work flow, you should consider doing your work in a separate branch. Then you could do something like:
$ git checkout master $ git merge working~3 $ git push origin master:master
Note that the "origin master:master" part is probably optional for your setup.