![](https://programming.dev/pictrs/image/0861eb85-2e62-4f35-9a4f-174c22cea249.jpeg)
![](https://programming.dev/pictrs/image/55a4e1dc-a7d0-41e6-88fc-05e1cd3ccab6.png)
Note that you can examine branch reflog to find where branch was forked from (1st image), or tell Git to examine it for you with git rebase --fork-point
one of editors of Git Rev News: https://git.github.io/rev_news/
Note that you can examine branch reflog to find where branch was forked from (1st image), or tell Git to examine it for you with git rebase --fork-point
One thing that is not made clear in the article, is that there is a separate reflog for HEAD, and separate reflogs for individual branches.
HEAD reflog logs changes such as “checkout: moving from next to main”. Branch reflog logs changes such as “branch: Created from HEAD” (first entry in branch reflog). Most are common to both (i.e. git logs both to HEAD reflog and the reflog of currently checked out branch).
Because ultimately you look at the diff of changes, which significantly limits the amount of code you need to examine to find the bug (or at least something that uncovered the bug).
Not much new here (I think I saw nearly the same description of Git history a short while ago), and there are a few factual errors in there - or at least parts that are not clear.
The “tree” objects have nothing to do with the tree
command, and nothing to do with how repo objects are stored on the filesystem. You can display tree objects with “git cat-file -p
” (just like any type of objects), but also with “git ls-tree
” command.
The “commit” objects also store the reference to previous version (previous commit) in the history, which is very important. It enables Git to perform merges fast and well.
A bit pedantic, but “tag” objects can point to any type of object, though tags pointing to commits are most common.
There was a proposal to add universal signing to Git in 2021, but I think it went nowhere for various reasons (like breaking SHA-1 <-> SHA-256 signing interoperability, if I understand the discussion correctly).
As an in-depth alternative, I recommend “Patterns for Managing Source Code Branches” by Martin Fowler: https://martinfowler.com/articles/branching-patterns.html
The README of this project needs to describe what this project actually do. It would also be nice to have an example of how it can be used, and how long it takes in the case described in an example.
Note that this idea (forcing SHA-1 id to have some specific format) is not something new:
The partial checkout support in Git is getting improved. Take a look, maybe it now solves your problems.
Support for large repositories via
scalar
works also for Linux (though not everything is ported; as main body of work on supporting large repositories was created to deal with the size of MS Windows repository, it started with Windows-only support / optimization first).There are alternatives to submodules, like https://github.com/chronoxor/gil