Setup and use a new online repo
Sign in to github or bitbucket; start a new repository; add .gitignore (things to exclude such as your python virtualenv, config files with passwords etc), then follow the instructions to:
git clone # Clone the remote repo to local repo git add -A # Add all files / subdirectories to staging area git commit -m 'Commit comment' # Commit the changes to the local repo git push -u origin master # Push to the remote repo, master branch
Setup new online repo from command line
git init git add . git commit -m 'initial commit of full repository' # bitbucket: curl --user USERNAME https://api.bitbucket.org/1.0/repositories/ \ --data name=REPONAME --data is_private='true' git remote add origin https://USERNAME@bitbucket.org/USERNAME/REPONAME.git # github: curl -u 'USER' https://api.github.com/user/repos -d '{"name":"REPONAME "}' git remote add origin https://github.com/andy-pi/test.git git push -u origin --all
Find out what is going on
git status # Get current status of git git log # Get Git commit log showing their SHA git branch # List local branches and find out current branch git diff # Shows differences (?)
Using branches
git branch branch_name # Creates a new branch. git checkout branch_name # Used to switch from one branch to another. git merge branch_name # Used to join file changes from one branch to another. git branch -d branch_name # Deletes the branch specified.
To merge back to master
git checkout master # Switch back to master branch. git merge branch_name # Merge the branch. git push # push the master branch git branch -d branch_name # Deletes the local branch specified. git push origin --delete branch_name # Deletes the remote branch
Correct way to collaborate on remote repos
1. Fetch and merge changes from the remote
2. Create a branch to work on a new project feature
3. Develop the feature on your branch and commit your work
4. Fetch and merge from the remote again (in case new commits were made while you were working)
5. Push your branch up to the remote for review
(Steps 1 and 4 are a safeguard against merge conflicts, which occur when two branches contain file changes that cannot be merged with the git merge command.)
Explanation of pull requests: (note pull=fetch+merge)
https://www.atlassian.com/git/tutorials/making-a-pull-request/example
Undoing / resetting / updating stuff
git checkout HEAD filename # Discards changes in the working directory. git reset HEAD filename # Unstages file changes in the staging area. git reset # Can be used to reset to a previous commit. git fetch # fetches the remote repo and updates local copy git rm --cached filename # remove file from the repo without deleting local copy of the file git rm filename.txt # remove file from the repo completely git commit -m "remove filename.txt"
Remove all commits before commit XXXXX
git checkout --orphan temp XXXXX git commit -m "Truncated history" git rebase --onto temp XXXXXmaster git branch -D temp git prune --progress git gc --aggressive git push -f origin master