@@ -201,79 +201,6 @@ If you forgot to make a backup branch::
201
201
# reset the branch to where it was before the botched rebase
202
202
git reset --hard cool-feature@{2}
203
203
204
-
205
- .. _rebase-on-main :
206
-
207
- Rebasing on ``upstream/main ``
208
- -----------------------------
209
-
210
- Let's say you thought of some work you'd like to do. You
211
- :ref: `update-mirror-main ` and :ref: `make-feature-branch ` called
212
- ``cool-feature ``. At this stage, ``main `` is at some commit, let's call it E.
213
- Now you make some new commits on your ``cool-feature `` branch, let's call them
214
- A, B, C. Maybe your changes take a while, or you come back to them after a
215
- while. In the meantime, ``main `` has progressed from commit E to commit (say) G:
216
-
217
- .. code-block :: none
218
-
219
- A---B---C cool-feature
220
- /
221
- D---E---F---G main
222
-
223
- At this stage you consider merging ``main `` into your feature branch, and you
224
- remember that this here page sternly advises you not to do that, because the
225
- history will get messy. Most of the time you can just ask for a review, and not
226
- worry that ``main `` has got a little ahead. But sometimes, the changes in
227
- ``main `` might affect your changes, and you need to harmonize them. In this
228
- situation you may prefer to do a rebase.
229
-
230
- ``rebase `` takes your changes (A, B, C) and replays them as if they had been
231
- made to the current state of ``main ``. In other words, in this case, it takes
232
- the changes represented by A, B, C and replays them on top of G. After the
233
- rebase, your history will look like this:
234
-
235
- .. code-block :: none
236
-
237
- A'--B'--C' cool-feature
238
- /
239
- D---E---F---G main
240
-
241
- See `rebase without tears `_ for more detail.
242
-
243
- .. _rebase without tears : https://matthew-brett.github.io/pydagogue/rebase_without_tears.html
244
-
245
- To do a rebase on ``upstream/main ``::
246
-
247
- # Fetch changes from upstream/main
248
- git fetch upstream
249
- # go to the feature branch
250
- git checkout cool-feature
251
- # make a backup in case you mess up
252
- git branch tmp cool-feature
253
- # rebase cool-feature onto main
254
- git rebase --onto upstream/main upstream/main cool-feature
255
-
256
- In this situation, where you are already on branch ``cool-feature ``, the last
257
- command can be written more succinctly as::
258
-
259
- git rebase upstream/main
260
-
261
- When all looks good you can delete your backup branch::
262
-
263
- git branch -D tmp
264
-
265
- If it doesn't look good you may need to have a look at
266
- :ref: `recovering-from-mess-up `.
267
-
268
- If you have made changes to files that have also changed in ``main ``, this may
269
- generate merge conflicts that you need to resolve - see the `git rebase `_ man
270
- page for some instructions at the end of the "Description" section. There is
271
- some related help on merging in the git user manual - see `resolving a merge `_.
272
-
273
- .. _git rebase : https://git-scm.com/docs/git-rebase
274
- .. _resolving a merge : https://schacon.github.io/git/user-manual.html#resolving-a-merge
275
-
276
-
277
204
.. _rewriting-commit-history :
278
205
279
206
Rewriting commit history
@@ -360,3 +287,75 @@ and the history looks now like this::
360
287
361
288
If it went wrong, recovery is again possible as explained :ref: `above
362
289
<recovering-from-mess-up>`.
290
+
291
+
292
+ .. _rebase-on-main :
293
+
294
+ Rebasing on ``upstream/main ``
295
+ -----------------------------
296
+
297
+ Let's say you thought of some work you'd like to do. You
298
+ :ref: `update-mirror-main ` and :ref: `make-feature-branch ` called
299
+ ``cool-feature ``. At this stage, ``main `` is at some commit, let's call it E.
300
+ Now you make some new commits on your ``cool-feature `` branch, let's call them
301
+ A, B, C. Maybe your changes take a while, or you come back to them after a
302
+ while. In the meantime, ``main `` has progressed from commit E to commit (say) G:
303
+
304
+ .. code-block :: none
305
+
306
+ A---B---C cool-feature
307
+ /
308
+ D---E---F---G main
309
+
310
+ At this stage you consider merging ``main `` into your feature branch, and you
311
+ remember that this here page sternly advises you not to do that, because the
312
+ history will get messy. Most of the time you can just ask for a review, and not
313
+ worry that ``main `` has got a little ahead. But sometimes, the changes in
314
+ ``main `` might affect your changes, and you need to harmonize them. In this
315
+ situation you may prefer to do a rebase.
316
+
317
+ ``rebase `` takes your changes (A, B, C) and replays them as if they had been
318
+ made to the current state of ``main ``. In other words, in this case, it takes
319
+ the changes represented by A, B, C and replays them on top of G. After the
320
+ rebase, your history will look like this:
321
+
322
+ .. code-block :: none
323
+
324
+ A'--B'--C' cool-feature
325
+ /
326
+ D---E---F---G main
327
+
328
+ See `rebase without tears `_ for more detail.
329
+
330
+ .. _rebase without tears : https://matthew-brett.github.io/pydagogue/rebase_without_tears.html
331
+
332
+ To do a rebase on ``upstream/main ``::
333
+
334
+ # Fetch changes from upstream/main
335
+ git fetch upstream
336
+ # go to the feature branch
337
+ git checkout cool-feature
338
+ # make a backup in case you mess up
339
+ git branch tmp cool-feature
340
+ # rebase cool-feature onto main
341
+ git rebase --onto upstream/main upstream/main cool-feature
342
+
343
+ In this situation, where you are already on branch ``cool-feature ``, the last
344
+ command can be written more succinctly as::
345
+
346
+ git rebase upstream/main
347
+
348
+ When all looks good you can delete your backup branch::
349
+
350
+ git branch -D tmp
351
+
352
+ If it doesn't look good you may need to have a look at
353
+ :ref: `recovering-from-mess-up `.
354
+
355
+ If you have made changes to files that have also changed in ``main ``, this may
356
+ generate merge conflicts that you need to resolve - see the `git rebase `_ man
357
+ page for some instructions at the end of the "Description" section. There is
358
+ some related help on merging in the git user manual - see `resolving a merge `_.
359
+
360
+ .. _git rebase : https://git-scm.com/docs/git-rebase
361
+ .. _resolving a merge : https://schacon.github.io/git/user-manual.html#resolving-a-merge
0 commit comments