Merge develop branch into master
git checkout develop git merge master
At this point, if there are any merge conflicts, you can resolve them.
git checkout master git merge develop git push origin master
git-cherry-pick is used when you want to take a commit from one branch and apply it to a commit in another branch. This can be thought of as a more surgical version of git merge (applying one commit vs applying multiple commits).
git cherry-pick <hash of commit>
Syncing a fork
When you're introducing changes to another open source project, sometimes your fork gets out of sync with the original project. To fix this, do the following:
git fetch upstream git checkout master git merge upstream/master
In the event that you get this error:
fatal: 'upstream' does not appear to be a git repository
Check if the upstream for the original project is set:
git remote -v
If it isn't, get the url for the git repo and run it with this command:
git remote add upstream https://github.com/<original project>
For example, if I was working on my copy of the xssValidator project, and wanted to add the upstream for the original:
git remote add upstream https://github.com/nVisium/xssValidator
Remove latest commit from GitHub
Pushed too soon or by accident? Let's fix that.
git rebase -i HEAD~2
- Delete the commit (should be the second line in the text file)
git push origin +<branchName>- for example:
git push origin +master
Redo git commits that have been pushed to remote
- Check out the branch you want your commits to be in:
git checkout <branch>
- Find git ref id one commit before the commit you want to change
git rebase -i <ref #>
- Remove commits you do not want in this new branch
- Edit the messages for commits as needed.
- Save the file.
git commit --amend- change the commit message to what you want
git rebase --continue
- Once done with commits,
git push -u origin <name of branch>
Merge file from one branch to another
git checkout <branch to merge from> <file name>
Update branch with another
git checkout <branch to overwrite>
git rebase origin/master- to rebase all changes on this branch on the tip of master
git add <whatever you forgot to include>
git commit --amend
Stash queued changes to go to another branch && restore them
- Do whatever in other branch
- Go to branch that was stashed
Fix github sync issue:
git stash save --keep-index git stash drop
Delete file from github history (in case sensitive information goes up on accident):
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch <filename>' git push origin --force --all
Change authors of pushed commits with rebasing
- Find the commit before (chronologically) the first commit that you want to change.
git rebase -i <SHA hash of the commit before the one you want to change>
- Change the lines for the commits you want to modify by changing them from
- Save the file once you're done.
- Change the commit to the author you want to be reflected like so:
git commit --amend --author="New Author Name <email@example.com>". For example:
git commit --amend --author="Jayson Grace <firstname.lastname@example.org>"
- Once you've changed the author for the commit, continue on through the rebase using
git rebase --continueuntil you've resolved all commits.
- You may need to deal with some errors that come up, so be sure to fix those, and then
git addthe file that you've had to resolve before using
git rebase --continue.
- Finish by using
git push --force
Undo last commit and keep changes made
git reset HEAD~1
Add the existing git repo as a submodule of the current repo:
git submodule add <git repo> <destination path - optional>
This should generate a
.gitmodules file and the folder of the repo you intended to submodule.
Download the contents of the submodule repo:
git submodule update --init --recursive
Clone a repo with submodules:
git clone --recurse-submodules <repo with submodules>
Update upstream changes to submodules:
git fetch git merge origin/master