comparison docs/user-guide.rst @ 4618:803d32f4e498

docs: change `unstable` references to `orphan` Per https://www.mercurial-scm.org/wiki/CEDVocabulary
author Matt Harbison <matt_harbison@yahoo.com>
date Sat, 27 Apr 2019 21:24:18 -0400
parents a78310b900e3
children a05bfdf372fb
comparison
equal deleted inserted replaced
4617:2cab06f5c4d4 4618:803d32f4e498
334 ====================== 334 ======================
335 335
336 So far, every obsolete changeset we have seen is also hidden. However, 336 So far, every obsolete changeset we have seen is also hidden. However,
337 these are *not* the same thing—that's why they have different names. 337 these are *not* the same thing—that's why they have different names.
338 It's entirely possible to have obsolete changesets that are not 338 It's entirely possible to have obsolete changesets that are not
339 hidden. We'll see examples of that soon, when we create *unstable* 339 hidden. We'll see examples of that soon, when we create *orphan*
340 changesets. 340 changesets.
341 341
342 Note that all hidden changesets are obsolete: hidden is a subset of 342 Note that all hidden changesets are obsolete: hidden is a subset of
343 obsolete. This is explained in more depth in the `concepts`_ section. 343 obsolete. This is explained in more depth in the `concepts`_ section.
344 344
347 Life with ``evolve`` (advanced usage) 347 Life with ``evolve`` (advanced usage)
348 ------------------------------------- 348 -------------------------------------
349 349
350 Now that you've got a solid understanding of how ``evolve`` works in 350 Now that you've got a solid understanding of how ``evolve`` works in
351 concert with changeset obsolescence, let's explore some more advanced 351 concert with changeset obsolescence, let's explore some more advanced
352 scenarios. All of these scenarios will involve *unstable* changesets, 352 scenarios. All of these scenarios will involve *orphan* changesets,
353 which is an unavoidable consequence of obsolescence. What really sets 353 which is an unavoidable consequence of obsolescence. What really sets
354 ``evolve`` apart from other history modification mechanisms is the 354 ``evolve`` apart from other history modification mechanisms is the
355 fact that it recognizes instability like unstable changesets and provides 355 fact that it recognizes instability like orphan changesets and provides
356 a consistent way for you to get back to a stable repository. 356 a consistent way for you to get back to a stable repository.
357 357
358 (Incidentally, there are two other types of instability that changesets 358 (Incidentally, there are two other types of instability that changesets
359 can get into with ``evolve``: they may be *divergent* or 359 can get into with ``evolve``: they may be *divergent* or
360 *bumped*. Both of those states are more likely to occur when 360 *bumped*. Both of those states are more likely to occur when
391 $ hg update 11 391 $ hg update 11
392 [...fix mistake...] 392 [...fix mistake...]
393 $ hg amend 393 $ hg amend
394 394
395 At this point, revision 11 is *obsolete* and revisions 12 and 13—the 395 At this point, revision 11 is *obsolete* and revisions 12 and 13—the
396 descendants of 11—are in a funny state: they are *unstable*. 396 descendants of 11—are in a funny state: they are *orphan*.
397 397
398 .. figure:: figures/figure-ug06.svg 398 .. figure:: figures/figure-ug06.svg
399 399
400 Figure 6: amending a changeset with descendants means the amended 400 Figure 6: amending a changeset with descendants means the amended
401 changeset is obsolete but remains visible; its non-obsolete 401 changeset is obsolete but remains visible; its non-obsolete
402 descendants are *unstable*. The temporary amend commit, revision 402 descendants are *orphan*. The temporary amend commit, revision
403 14, is hidden because it has no non-obsolete descendants. 403 14, is hidden because it has no non-obsolete descendants.
404 404
405 All non-obsolete descendants of an obsolete changeset are considered 405 All non-obsolete descendants of an obsolete changeset are considered
406 unstable. An interesting consequence of this is that revision 11 is 406 orphans. An interesting consequence of this is that revision 11 is
407 still visible, even though it is obsolete. Obsolete changesets with 407 still visible, even though it is obsolete. Obsolete changesets with
408 non-obsolete descendants are not hidden. 408 non-obsolete descendants are not hidden.
409 409
410 The fix is to *evolve* history:: 410 The fix is to *evolve* history::
411 411
423 (15-17) replace them. 423 (15-17) replace them.
424 424
425 .. figure:: figures/figure-ug07.svg 425 .. figure:: figures/figure-ug07.svg
426 426
427 Figure 7: evolve your repository (``hg evolve --all``) to take care 427 Figure 7: evolve your repository (``hg evolve --all``) to take care
428 of instability. Unstable changesets become obsolete, and are 428 of instability. Orphan changesets become obsolete, and are
429 replaced by successors just like the amended changeset was. 429 replaced by successors just like the amended changeset was.
430 430
431 Example 8: Prune an older changeset 431 Example 8: Prune an older changeset
432 =================================== 432 ===================================
433 433
439 439
440 You want to drop revision 19, but keep 18 and 20. No problem:: 440 You want to drop revision 19, but keep 18 and 20. No problem::
441 441
442 $ hg prune 19 442 $ hg prune 19
443 1 changesets pruned 443 1 changesets pruned
444 1 new unstable changesets 444 1 new orphan changesets
445 445
446 As above, this leaves your repository in a funny intermediate state: 446 As above, this leaves your repository in a funny intermediate state:
447 revision 20 is the non-obsolete descendant of obsolete revision 19. 447 revision 20 is the non-obsolete descendant of obsolete revision 19.
448 That is, revision 20 is unstable. 448 That is, revision 20 is an orphan.
449 449
450 .. figure:: figures/figure-ug08.svg 450 .. figure:: figures/figure-ug08.svg
451 451
452 Figure 8: ``hg prune`` marks a changeset obsolete without creating 452 Figure 8: ``hg prune`` marks a changeset obsolete without creating
453 a successor. Just like with ``hg amend``, non-obsolete descendants 453 a successor. Just like with ``hg amend``, non-obsolete descendants
454 of the pruned changeset are now unstable. 454 of the pruned changeset are now orphans.
455 455
456 As before, the solution to unstable changesets is to evolve your 456 As before, the solution to orphan changesets is to evolve your
457 repository:: 457 repository::
458 458
459 $ hg evolve --all 459 $ hg evolve --all
460 460
461 This rebases revision 20 on top of 18 as the new revision 21, leaving 461 This rebases revision 20 on top of 18 as the new revision 21, leaving
483 directory:: 483 directory::
484 484
485 $ hg update 22 485 $ hg update 22
486 1 files updated, 0 files merged, 0 files removed, 0 files unresolved 486 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
487 $ hg uncommit file2.c 487 $ hg uncommit file2.c
488 1 new unstable changesets 488 1 new orphan changesets
489 $ hg status 489 $ hg status
490 M file2.c 490 M file2.c
491 491
492 Now your repository has unstable changesets, so you need to evolve it. 492 Now your repository has orphan changesets, so you need to evolve it.
493 However, ``hg evolve`` requires a clean working directory to resolve merge 493 However, ``hg evolve`` requires a clean working directory to resolve merge
494 conflicts, so you need to decide what to do with ``file2.c``. 494 conflicts, so you need to decide what to do with ``file2.c``.
495 495
496 In this case, the change to ``file2.c`` was a temporary debugging 496 In this case, the change to ``file2.c`` was a temporary debugging
497 hack, so we can discard it and immediately evolve the instability away:: 497 hack, so we can discard it and immediately evolve the instability away::
528 ``file2.c`` in the working dir:: 528 ``file2.c`` in the working dir::
529 529
530 $ hg update -q 26 530 $ hg update -q 26
531 1 files updated, 0 files merged, 0 files removed, 0 files unresolved 531 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
532 $ hg uncommit -q file2.c # obsoletes rev 26, creates rev 28 532 $ hg uncommit -q file2.c # obsoletes rev 26, creates rev 28
533 1 new unstable changesets 533 1 new orphan changesets
534 $ hg status 534 $ hg status
535 M file2.c 535 M file2.c
536 536
537 This time, let's save that useful change before evolving:: 537 This time, let's save that useful change before evolving::
538 538
539 $ hg commit -m 'useful tweak' # rev 29 539 $ hg commit -m 'useful tweak' # rev 29
540 540
541 Figure 11 shows the story so far: ``uncommit`` obsoleted revision 26 541 Figure 11 shows the story so far: ``uncommit`` obsoleted revision 26
542 and created revision 28, the successor of 26. Then we committed 542 and created revision 28, the successor of 26. Then we committed
543 revision 29, a child of 28. We still have to deal with the revision 27, 543 revision 29, a child of 28. We still have to deal with the revision 27,
544 which is an unstable changeset. 544 which is an orphan changeset.
545 545
546 .. figure:: figures/figure-ug11.svg 546 .. figure:: figures/figure-ug11.svg
547 547
548 Figure 11: Uncommitting a file and then committing that change 548 Figure 11: Uncommitting a file and then committing that change
549 separately will soon result in a two-headed repository. 549 separately will soon result in a two-headed repository.
550 550
551 This is where things get tricky. As usual when a repository has 551 This is where things get tricky. As usual when a repository has
552 unstable changesets, we want to evolve it:: 552 orphan changesets, we want to evolve it::
553 553
554 $ hg evolve --all 554 $ hg evolve --all
555 555
556 The problem is that ``hg evolve`` rebases revision 27 onto revision 556 The problem is that ``hg evolve`` rebases revision 27 onto revision
557 28, creating 30 (the successor of 27). This is entirely logical: 27 557 28, creating 30 (the successor of 27). This is entirely logical: 27
559 successor (30) should be the child of 26's successor (28). 559 successor (30) should be the child of 26's successor (28).
560 Unfortunately, that leaves us with a two-headed repository: 560 Unfortunately, that leaves us with a two-headed repository:
561 561
562 .. figure:: figures/figure-ug12.svg 562 .. figure:: figures/figure-ug12.svg
563 563
564 Figure 12: ``evolve`` takes care of unstable changesets; it does 564 Figure 12: ``evolve`` takes care of orphan changesets; it does
565 not solve all the world's problems. 565 not solve all the world's problems.
566 566
567 As usual when faced with a two-headed repository, you can either merge 567 As usual when faced with a two-headed repository, you can either merge
568 or rebase. It's up to you. 568 or rebase. It's up to you.
569 569
592 592
593 The current implementation of ``hg touch`` is not ideal, and is likely to 593 The current implementation of ``hg touch`` is not ideal, and is likely to
594 change in the future. Consider the history in Figure 12, where revision 27 594 change in the future. Consider the history in Figure 12, where revision 27
595 is obsolete and the child of 26, also obsolete. If we ``hg touch 27``, that 595 is obsolete and the child of 26, also obsolete. If we ``hg touch 27``, that
596 creates a new revision which is a non-obsolete child of 26—i.e., it is an 596 creates a new revision which is a non-obsolete child of 26—i.e., it is an
597 unstable. It's also *divergent*, another type of trouble that we'll learn 597 orphan. It's also *divergent*, another type of trouble that we'll learn
598 about in the `next section`_. 598 about in the `next section`_.
599 599
600 .. _`next section`: sharing.html 600 .. _`next section`: sharing.html