this post was submitted on 04 Jun 2025
144 points (94.4% liked)

Linux

54796 readers
680 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 6 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[–] squaresinger@lemmy.world 9 points 1 day ago* (last edited 1 day ago) (1 children)

Looks like Mercurial can change the history just fine using the hg command. You just need to enable it first.

https://book.mercurial-scm.org/read/changing-history.html

Git can also be configured to disable history rewrites.

https://stackoverflow.com/questions/2085871/strategy-for-preventing-or-catching-git-history-rewrite

So the difference between git and hg really just comes down to the defaults.

[–] sxan@midwest.social -3 points 1 day ago (1 children)

Safely changing history

How exactly does Mercurial manage to keep you from getting in trouble while changing history?

Mercurial actually keeps track of something called phases. Every time you push changesets to another repository, Mercurial analyses the phases for those changesets and adapts them if necessary.

There are three phases, each resulting in different behaviour:

  • secret: This phase indicates that a changeset should not be shared with others. If someone else pulls from your repository, or you push to another repository, these changesets will not be pushed along.
  • draft: This is the default phase for any new changeset you create. It indicates that the changeset has not yet been pushed to another repository. Pushing this changeset to another repository will change its phase to public.
  • public: This phase indicates that a changeset was already shared with others. This means changing history should not be allowed if it includes this changeset.

Mercurial uses this information to determine which changesets are allowed to be changed. It also determines how to select changes to rebase or histedit automatically. For example: using histedit without any arguments will only show draft and secret changesets for you to change.

You can not change history for any published changes - like I said, doing so makes your repository incompatible with any other clone.

[–] squaresinger@lemmy.world 6 points 1 day ago

You can not change history for any published changes - like I said, doing so makes your repository incompatible with any other clone.

That's the same on Git.