== Work on branches in parallel
In this exercise you will learn how to change commits using the amend
functionality. This is for example useful if you work in different
branches in parallel and you want to temporarily save your work. You
will commit an unfinished change and later on replace this commit with
a new, refined commit using the amend feature of git.

=== Preparation
Follow exercise 2, link:develop-a-feature.html[Develop a feature/bug fix],
to create a commit on a feature branch based on the remote tracking
branch 'origin/master'.

=== Start working on another feature

* Create a new local branch based on the remote tracking branch
  'origin/master'
* You may create the new branch from the History View:
** Select the project, then click 'Show In > History'
   (Some views, e.g. in the Java EE-Perspective, do not have this
   shortcut, in this case use 'Team > Show in History')
** In the History View click all toggle buttons as shown in the
   screenshot (Show all changes in repository containing the selected
   resources, Compare Mode, Show all Branches and Tags)
+
image:history-view-2.png[History View]

** Select 'Create Branch...' from the context menu on the commit where
   'origin/master' points to
+
image:create-branch-from-history-view.png[Create Branch from History View]

* Or you may do that from the Repositories View:
+
Select the remote tracking branch 'origin/master' and click 'Create
Branch...'.
+
image:create-branch-from-repositories-view.png[Create Branch from Repositories View]

* Enter "addMultiplyOperation" as the name of the new branch, make sure
  the 'checkout new branch' checkbox is selected and click on 'Finish'
* Check that now you don’t see the changes of the first exercise
  anymore in your workspace.
* Start working on a change, e.g. add a 'Multiply' operation, do not
  commit yet, first read on.

image:multiply-class.png[Multiply Class]

.Calculator.java:
image:register-multiply.png[Register Multiply]

=== Switch branches
Now you want to switch to another branch but you want to continue
working at your new feature later on. The easiest thing to do is to
just commit your work in progress and change that commit later on.

* Select your project in the Package Explorer and select
  'Team > Commit' or click 'Commit' in the Git Toolbar
* In the commit dialog enter a preliminary message, e.g.
  "[Unfinished] Add multiply operation", select the files to be
  committed and click on 'Commit'
+
image:commit-changes.png[Commit Changes]

* Now you can switch to the first feature branch "addDivideOperation",
  either by double clicking on the branch node in the Git Repositories
  View, by selecting 'Team > Switch To > addDivideOperation' or by
  selecting 'Checkout' from the context menu on the
  "addDivideOperation" branch in the History View.
* Check that your workspace contains the changes you committed in your
  first feature (implementing divide) branch. You could now continue
  working here. For example: you may want to fix the division by zero
  issue if it is not already handled. If you do any changes in the
  "addDivideOperation" branch don’t forget to commit them with amend
  before the next step
* Switch back to the "addMultiplyOperation" branch

=== Continue working on the branch adding Multiply
* Do another change in the workspace improving Multiply.
* Compare your changed project with the first, preliminary commit by
  selecting 'Compare With > HEAD revision'. This will show you the
  changes you will add on top of the first commit.
* Compare your changed project with the parent commit of your first,
  preliminary commit by selecting 'Compare With > Previous revision'.
  This will show you the changes you will have in your new commit after
  the next step.
* Create a new commit with the combined changes of your first,
  preliminary commit and your current changes
** Select your project in the Package Explorer and select
   'Team > Commit' or click 'Commit' in the Git Toolbar.
** Press the 'Amend' button as shown below.
+
image:commit-changes-with-amend.png[Commit Changes with Amend]

** Now you see again the commit message of the last commit you made in
   this branch. Change it to something meaningful (e.g remove
   '[UNFINISHED]') and click the 'Commit' button.
** In the History View you can now see that your first, preliminary
   commit was replaced by the new one.
+
image:history-view-3.png[History View]

=== Fixing the commit message
The amend feature is often used to fix the commit message of what you
just committed.

* In order to change the commit message of the last commit:
+
Select your project in the Package Explorer and select 'Team > Commit'
or click 'Commit in' the Git Toolbar.

* Because there are no changes to commit EGit asks you if you want to
  amend the last commit:
+
image:amend-dialog.png[Amend Dialog]

* Click 'Yes'.
* Change the commit message and click on the 'Commit' button.

link:index.html[Git Exercises]
