9:59:59.000,9:59:59.000 Git Rebase is the ability[br]to take existing commits, 9:59:59.000,9:59:59.000 and to place them on a branch[br]that starts today. 9:59:59.000,9:59:59.000 ♪ (jazzy theme music throughout) ♪ 9:59:59.000,9:59:59.000 Creating a branch is a tough decision. 9:59:59.000,9:59:59.000 Start it today, or start it later? 9:59:59.000,9:59:59.000 Well, some important fixes[br]might be happening right now. 9:59:59.000,9:59:59.000 So better wait until tomorrow. 9:59:59.000,9:59:59.000 That difficult decision[br]has gone away with Git. 9:59:59.000,9:59:59.000 Start a branch whenever you like, 9:59:59.000,9:59:59.000 and make it contain the changes[br]that you intend to deliver. 9:59:59.000,9:59:59.000 Focused on a particular feature, 9:59:59.000,9:59:59.000 bug fix, or objective. 9:59:59.000,9:59:59.000 What about wanting this to start 9:59:59.000,9:59:59.000 at a later place in history, 9:59:59.000,9:59:59.000 in order to incorporate those hot fixes 9:59:59.000,9:59:59.000 that are going on to the master branch? 9:59:59.000,9:59:59.000 No problem.[br]Rebase to the rescue. 9:59:59.000,9:59:59.000 Rebase, in its standard usage form, 9:59:59.000,9:59:59.000 allows one branch to be relocated[br]farther down the history track, 9:59:59.000,9:59:59.000 meaning taking all of the changes[br]that are isolated on your branch, 9:59:59.000,9:59:59.000 and acting as if they happened after 9:59:59.000,9:59:59.000 all of the modern work[br]on the master branch. 9:59:59.000,9:59:59.000 This accomplishes the same thing,[br]but with cleaner history, 9:59:59.000,9:59:59.000 than doing a reverse merge 9:59:59.000,9:59:59.000 from the master branch[br]to the feature branch. 9:59:59.000,9:59:59.000 The same contents will be present[br]in the feature branch, 9:59:59.000,9:59:59.000 but without the complication of the merge, 9:59:59.000,9:59:59.000 going into that feature branch,[br]and recorded in its history. 9:59:59.000,9:59:59.000 It's important to note[br]that the rebase command 9:59:59.000,9:59:59.000 is altering all of the commits[br]present in the branch. 9:59:59.000,9:59:59.000 It's preserving all of the work you did, 9:59:59.000,9:59:59.000 but their location and relationship[br]to other commits 9:59:59.000,9:59:59.000 is all changing. 9:59:59.000,9:59:59.000 This is primarily used for a branch[br]that you only own, 9:59:59.000,9:59:59.000 and isn't being worked on by others. 9:59:59.000,9:59:59.000 The change in the relationship, 9:59:59.000,9:59:59.000 and identifier for each of those commits, 9:59:59.000,9:59:59.000 makes it difficult to reconcile[br]with the work of others. 9:59:59.000,9:59:59.000 We're primarily talking about a branch[br]that you are focused on. 9:59:59.000,9:59:59.000 But with those constraints in place,[br]the use is quite simple. 9:59:59.000,9:59:59.000 git checkout to the feature branch, 9:59:59.000,9:59:59.000 git rebase on the source branch,[br]typically master. 9:59:59.000,9:59:59.000 That will then iteratively walk through[br]all of the commits 9:59:59.000,9:59:59.000 that have happened on the feature branch, 9:59:59.000,9:59:59.000 and replay them as if they were being[br]robotically rewritten, 9:59:59.000,9:59:59.000 starting from the latest point in time[br]on the master branch. 9:59:59.000,9:59:59.000 When the process completes, 9:59:59.000,9:59:59.000 after seeing it step through all of the individual commits, 9:59:59.000,9:59:59.000 it will let you know that the rebase is complete, 9:59:59.000,9:59:59.000 and you'll return to the command prompt 9:59:59.000,9:59:59.000 and what appears to be a similar state 9:59:59.000,9:59:59.000 to before you ran that instruction. 9:59:59.000,9:59:59.000 However, all of those historical commits[br]now have new identifiers, 9:59:59.000,9:59:59.000 keep that in mind. 9:59:59.000,9:59:59.000 You'll find a request to use this pattern 9:59:59.000,9:59:59.000 is most common in open source projects. 9:59:59.000,9:59:59.000 It's because they want to optimize 9:59:59.000,9:59:59.000 for future readership of the code base. 9:59:59.000,9:59:59.000 A single straight line of history[br]provides the easiest reading 9:59:59.000,9:59:59.000 for a future contributor to this project. 9:59:59.000,9:59:59.000 This is why they put the burden[br]on the contributors, 9:59:59.000,9:59:59.000 to make the history clean. 9:59:59.000,9:59:59.000 It's an effort, but one that benefits 9:59:59.000,9:59:59.000 every future collaborator on this project. 9:59:59.000,9:59:59.000 Continuously delivered applications, 9:59:59.000,9:59:59.000 such as web services, and web apps,