* Detail on stop/resume during interactive rebase Specified when interactive rebase will stop and how to continue the process * Update index.md
		
			
				
	
	
		
			74 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Git Rebase
 | |
| ---
 | |
| ## Git Rebase
 | |
| 
 | |
| Rebasing a branch in Git is a way to move the entirety of a branch to another point in the tree. The simplest example is moving a branch further up in the tree. Say we have a branch that diverged from the master branch at point A:
 | |
| 
 | |
|             /o-----o---o--o-----o--------- branch
 | |
|     --o-o--A--o---o---o---o----o--o-o-o--- master
 | |
| 
 | |
| When you rebase you can move it like this:
 | |
| 
 | |
|                                        /o-----o---o--o-----o------ branch
 | |
|     --o-o--A--o---o---o---o----o--o-o-o master
 | |
| 
 | |
| To rebase, make sure you have all the commits you want in the rebase in your master branch. Check out the branch you want to rebase and type `git rebase master` (where master is the branch you want to rebase on).
 | |
| 
 | |
| It is also possible to rebase on a different branch, so that for example a branch that was based on another branch (let's call it feature) is rebased on master:
 | |
| 
 | |
|                                 /---o-o branch
 | |
|                /---o-o-o-o---o--o------ feature
 | |
|     ----o--o-o-A----o---o--o-o-o--o--o- master
 | |
| 
 | |
| After `git rebase master branch` or `git rebase master` when you have checked out the branch, you'll get:
 | |
| 
 | |
| 
 | |
|                /---o-o-o-o---o--o------ feature
 | |
|     ----o--o-o-A----o---o--o-o-o--o--o- master
 | |
|                                       \---o-o branch
 | |
| 
 | |
| ### Git rebase interactive in the console
 | |
| 
 | |
| To use `git rebase` in the console with a list of commits you can choose, edit or drop in the rebase:
 | |
| 
 | |
| - Enter `git rebase -i HEAD~5` with the last number being any number of commits from the most recent backwards you want to review.
 | |
| - In vim, press `esc`, then `i` to start editing the test.
 | |
| - On the left hand side you can overwrite the `pick` with one of the commands below. If you want to squash a commit into a previous one and discard the commit message, enter `f` in the place of the `pick` of the commit.
 | |
| 
 | |
| ```
 | |
| pick 452b159 <message for this commit>
 | |
| pick 7fd4192 <message for this commit>
 | |
| pick c1af3e5 <message for this commit>
 | |
| pick 5f5e8d3 <message for this commit>
 | |
| pick 5186a9f <message for this commit>
 | |
| 
 | |
| # Rebase 0617e63..5186a9f onto 0617e63 (30 commands)
 | |
| #
 | |
| # Commands:
 | |
| # p, pick = use commit
 | |
| # r, reword = use commit, but stop to edit the commit message.
 | |
| # e, edit = use commit, but stop to amend or add commit.
 | |
| # s, squash = use commit, meld into previous commit and stop to edit the commit message.
 | |
| # f, fixup = like "squash", but discard this commit's log message thus doesn't stop.
 | |
| # x, exec = run command (the rest of the line) using shell
 | |
| # d, drop = remove commit
 | |
| #
 | |
| # These lines can be re-ordered; they are executed from top to bottom. 
 | |
| #
 | |
| # If you remove a line here THAT COMMIT WILL BE LOST.
 | |
| #
 | |
| # However, if you remove everything, the rebase will be aborted.
 | |
| #
 | |
| # Note that empty commits are commented out
 | |
| ```
 | |
| 
 | |
| - Enter `esc` followed by `:wq` to save and quit.
 | |
| - When rebase is stopped, make the necessary adjustments, then use `git rebase --continue` until rebase is successful
 | |
| - If it rebases successfully then you need to force push your changes with `git push -f` to add the rebased version to your github repo.
 | |
| - If there is a merge conflict, there are a number of ways to fix this, including following the suggestions in [this guide](https://help.github.com/enterprise/2.11/user/articles/resolving-a-merge-conflict-using-the-command-line/). One way is to open the files in a text editor and delete the parts of the code you do not want. Then use `git add <file name>` followed by `git rebase --continue`. You can skip over the conflicted commit by entering `git rebase --skip`, exit the git rebase by entering `git rebase --abort` in your console.
 | |
| 
 | |
| ### More Information:
 | |
| - [Git documentation: rebase](https://git-scm.com/docs/git-rebase)
 | |
| - [Thoughbot interactive guide to git rebase](https://robots.thoughtbot.com/git-interactive-rebase-squash-amend-rewriting-history)
 |