New to git — how do I get changes from cloned repo into original repo?
This is probably quite a newb question, but I can’t seem to figure it out.
Here’s what I did…
On the server (via ssh):
- Created a site on a dedicated server
- Created a git repo there (
git initI think?)
- Added and committed everything
At my office:
- Cloned the repo on my development machine
- Pulled everything
- Made some changes to local files
- Added the files again (is this right? not like svn!)
- Did a commit
- Did a push
…now, on the server, if I do
git show, it shows a diff where the server’s last copy of stuff is removed and the stuff I pushed from my office is being added. That’s what I want to happen. What I can’t figure out is: what do I need to do on the server to make the changes I pushed from my office become “live?”
I’ve had pretty good success deploying websites with svn in the past, and I figure I can get away with it with git too… but obviously I’m missing some piece of the puzzle. Thanks for any help.
edit – I just noticed this post: Git – pulling changes from clone back onto the master
Should I be pulling my office repo onto my server instead of pusing it there? So ssh from the office into the server and then have it git+ssh back into the office to pull that repo? That seems kind of crazy, I’d rather figure out how to make the push go through if possible.
rephrasing the question
I really just want to apply the patch shown by
git show. Does git have a built-in way of doing that?
It looks like
git checkout -f on the server did what I wanted, but creating a –bare repo would have been a better way to go (I’ve changed to this setup now).
2 Solutions collect form web for “New to git — how do I get changes from cloned repo into original repo?”
Usually on the server you would do a
git init --bare which creates a repo with no working directory. If that is the route you took then you would have to pull the changes from there to the web directory as the “deployment” step. So your work flow might look like…
On dev PC: 1. git clone <path to server repo> *make code changes* 2. git commit -am "fixed a bug" *add some new feature* 3. git commit -am "added cool new feature" 4. git push origin master On the server: *cd to www folder* 5. git pull
- Clones server repo to your dev machine, which you’ve already done
- Commits the bug fix to your local repo…not the server’s repo
- Commits the new feature to your local repo…again, not the server’s
- Pushes all changes from your master branch to the server’s master branch
At this point, none of your changes are visible on your website. You would need to “deploy” them.
5.Pulls the latest changes from the central repo on the server to the web server’s folder(s) that are being served up on the web.
There git tutorials are very good as is “Pro Git”, a free online book
If the git repo on the server you pushed to is for the live system, you would probably have to do a [EDIT]
git reset [--hard|...] HEAD on the server after a push I guess (see git-reset man page for details on whether using
--hard or something else;
--hard resets all non-committed modifications on your server).
If the live system is somewhere else on the server, do a
git pull from your repo you pushed to (in the directory with your live system).
push and fetch are complementary, i.e. pushing from A to B is like fetching A from B.
pull is a fetch followed by a checkout.
You should also read the article linked to by jmohr on the subtle differences between push and fetch / pull: git push not send changes to remote git repository