Git
Git command reference.
Upload all files in a local directory to a new Git repository
If you have a project on your computer and you just created an empty Git repository in GitHub, use these commands to upload everything to Git.
cd your-directory
git init
git remote add origin git@github.com:your-username/your-repo.git
git add .
git commit -am "Message"
git push -u origin master
Download all files from Git repository to a local directory
The opposite of the above option - for example, if your repository exists in GitHub, and you're working on it in a different local computer. Run this command outside of where you want the new directory to appear (not within the directory you want it to appear).
git clone git@github.com:your-username/your-repo.git # using SSH
git clone https://github.com/your-username/your-repo.git # using HTTPS
Remove one file from Git cache
Remove one cached file.
git rm -r —-cached file.txt
Override entire local directory
If you have some merge conflicts, or accidentally started to make a change to your local directory before pulling the changes from the master, here's how you can revert your local directory to what's on GitHub.
git fetch --all
git reset --hard origin/master
Ignore a directory
If you've been tracking a directory and later decide to ignore the whole directory, simply adding it to .gitignore
isn't enough. First you must add the directory to .gitignore, then run this command:
git rm -r --cached your-directory
Then push the changes.
Add .gitignore to an existing repository
Similar to above, but if you've added a .gitignore
with a lot of changes.
git rm -r --cached .
git add .
git commit -m "Message"
Force a push or pull
When you really want your local repository to override the remote.
git push -f origin master
git pull -f origin master
Merging changes from remote pull request with conflicts
Make a new branch with their changes.
git checkout -b their-branch master
git pull their.git master
Play with the files and commit them.
git add files
git commit -m “Message"
git push origin master
Merge back into your branch.
git checkout master
git merge --no-ff <their-branch) (:wq!)
git push origin master
Remove branch
Put a :
in front to remove instead of update remotely.
git push origin :branch-name
Use --delete
or -D
for local.
git branch --delete branch-name
Replace master with contents of another branch
git checkout branch-name
git merge -s ours master
git checkout master
git merge branch-name
Remove all local branches except master
git branch | grep -v "master" | xargs git branch -D
More than one branch may be added to the grep. To remove all local branches except "master" and "develop":
git branch | grep -v "master\|develop" | xargs git branch -D
Allow empty commit
Fix the problem of git hooks claiming everything is "Up-to-date".
git push production master
git commit --allow-empty -m 'push to execute post-receive'
git push production master
Merge new-feature branch into master
Merge branches.
git checkout master
git pull origin master
git merge new-feature
git push origin master
Switch to branch that exists on origin
git fetch --prune --all
git checkout other-branch
Fetch branch from origin
git fetch origin
git checkout --track origin/<remote_branch_name>
Accept all incoming changes
git pull -Xtheirs
Rebase from develop
git fetch --prune --all
git rebase origin/develop
git pull
git push
Stashing
Put your changes away and switch to another branch
git stash
git checkout -b new-branch
git stash pop
Accidentally committed to develop and want to move that commit to a branch
git branch new-branch
git reset HEAD~1
git checkout <files>
GitHub pages to non-docs folder
"dist" or whatever you want.
git subtree push --prefix dist origin gh-pages
Subtree within repo
git subtree add --prefix <local-dir> https://github.com/taniarascia/<repo> master --squash
git subtree pull --prefix <local-dir> https://github.com/taniarascia/<repo> master --squash
git subtree push --prefix <local-dir> https://github.com/taniarascia/<repo> master --squash
Exiting VIM
For those new to command line, ending up at the commit message screen (often when you forget to the add -m
flag to a commit) is confusing because pressing escape (or CTRL
+ C
) does not exit the screen, as the default editor for Git is VIM. Instead, press escape (if you've started attempting to type something) and type the following command:
:q
And press enter, and you'll return to where you were.