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
To obliterate local changes / mistakes and get back to last commit on remote
git fetch -all # Fetches all remote repo, but doesn't apply it git reset --hard origin/<branch_name> # Merge the branch.
To merge remote changes in when you also have uncommited local changes
git stash --include-untracked # stashes uncommited local changes to a temp location git pull # gets latest changes from the remote repo git stash pop # overwrites current workspace with contents of the stash; drops the stash # if remote changes cause conflicts with the stash, these need to be resolved manually (git stash list) (git stash clear)
To merge remote changes when you also have ALREADY commited local changes
(https://www.freecodecamp.org/news/git-pull-force-how-to-overwrite-local-changes-with-git/)
git pull # combination of git fetch and git merge # if remote changes cause merge conflicts, these need to be resolved manually, then: git add . git commit -m "merge message" git push
Undoing / 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"
Resetting to a previous commit after pushing
git log # View commits and find commit hash git reset --hard <commit_hash> # resets to that commit git reset --soft HEAD@{1} # adds to the staging area for a new commit? git commit -m "Reverting to the state of the project at <commit_hash>" git push
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