AIニュース最前線
最新ニュースAI日報Hacker日報週報動画AIツールトレンド企業

AIニュース最前線

世界中のAI最新情報を日本語で毎時更新

最新ニュース日報トレンド企業プレミアムRSS
© 2026 ainew.jp特定商取引法に基づく表記
ニュース一覧元記事を開く
GitHub Blog·2026年4月21日 01:43·約13分で読める

Git 2.54リリースのハイライト

#バージョン管理#Git#コミット履歴修正ツール#開発環境#オープンソース
TL;DR

Gitプロジェクトは2.54リリースで、複雑なインタラクティブリベースに代わる単純なコミット履歴修正を目的とした実験的コマンド「git history」を導入した。

AI深層分析2026年4月21日 02:03
4
重要/ 5段階
深度40%
4
関連度30%
3
実用性20%
4
革新性10%
3

キーポイント

1

Git 2.54リリース概要

137名の貢献者(うち66名が新規)により、バグ修正と新機能を含む2.53および2.54のハイライトが公開された。

2

新コマンド「git history」の機能

コミットメッセージの変更(reword)とコミットの分割(split)に対応し、インタラクティブなリベースに代わる単純ケース用のツールとして提供された。

3

設計上の制限と安全性

マージコミットを含む履歴やコンフリクトを発生させる操作は拒否され、作業ツリーやインデックスを変更しないため安全に実行可能。

4

基盤技術「git replay」の活用

内部で分離・ライブラリ化された「git replay」のコア機能を活用し、ベアリポジトリでも動作する設計となっている。

5

フックの内部処理の近代化

従来のアドホックな呼び出しパスから新しいフックAPIへ移行し、設定ベースの管理機能を活用可能になった。

6

幾何学的リパックがメンテナンスのデフォルトに

`git maintenance run`で従来のGCより効率的な incremental repack が自動適用され、補助データ構造の更新も維持される。

7

`git add -p`のインタラクティブ操作性向上

J/Kキーでのナビゲーション時に処理済みフラグを表示し、`--no-auto-advance`オプションでファイル間移動を手動制御可能にした。

影響分析・編集コメントを表示

影響分析

Gitの歴史修正ツールが「単純ケース」に特化し、学習コストと操作リスクを明確に分離した。これにより、大規模なオープンソースプロジェクトやAI/MLコードベースの管理において、安全で効率的なコミット履歴の保守が可能になる。

編集コメント

Gitのコマンド体系が「複雑なリベース」と「単純な修正」で明確に分化した点は、開発者の心理的負担を軽減する設計として評価できる。実験的コマンドながら実用性が高く、今後の公式標準化に期待が持てる。

Git 2.54 の主な新機能

オープンソースのGitプロジェクトは、137人以上(うち66人が新規)のコントリビューターによる機能追加とバグ修正を含むGit 2.54をリリースしました。前回Gitの最新動向をお伝えしたのは、バージョン2.52が公開された際でした。

今回の最新リリースを記念し、GitHubが前回から導入された主な新機能と変更点を紹介します。

 前回記事で取り上げたGitの最新リリースが2.52だったため、本ブログ投稿では2.53および2.54の両方のリリースから主な新機能を取り上げます。

git history で履歴を書き換える

Gitプロジェクトは、リポジトリ(repository)の履歴を書き換えるためのツールを提供する長い歴史を持っています。その中でも最もよく知られているのが git rebase –i で、非常に柔軟性が高く、コミット(commit)の順序入れ替え、スクイッシュ(squash)、編集、削除が可能です。しかし、その柔軟性には複雑さが伴います。インタラクティブリベース(interactive rebase)はコミットの範囲に対して動作し、進行中に作業ツリー(working tree)とインデックス(index)を更新するため、先に進む前に解決が必要なコンフリクト状態に陥る可能性があります。

より単純なケースでは、これらの仕組みはやりすぎに感じられることがあります。3つ前のコミットメッセージのタイプミスを修正したいだけの場合、あるいは1つのコミットを2つに分割したいだけのケースでは、インタラクティブリベースでも動作しますが、ToDoリストの準備、編集対象のコミットの指定、そしてリベースの完了までの実行という手順が必要になります。

Git 2.54 では、まさにこれらの単純なケース向けに設計された新しい実験的コマンド git history が導入されました。この history コマンドは現在、2つの操作をサポートしています:reword(メッセージ変更)と split(分割)。

git history reword は、指定されたコミットのメッセージをエディターで開き、その場で書き換えます。これにより、そのコミットから分岐するすべてのブランチが更新されます。git rebase とは異なり、作業ツリー(working tree)やインデックス(index)に触れることなく、ベアリポジトリ(bare repository)でも動作します。

git history split を使用すると、どのハンク(hunks)を新しい親コミットに切り出すかを選択することで、インタラクティブに1つのコミットを2つに分割できます。git add –p を介してインタラクティブモードで add コマンドを使用したことがある方なら、このインターフェースは馴染み深く見えるでしょう:

$ git history split HEAD

diff --git a/bar b/bar

new file mode 100644

index 0000000..50810a5

--- /dev/null

+++ b/bar

@@ -0,0 +1 @@

+bar

(1/1) Stage addition [y,n,q,a,d,p,?]? y

ハンク(hunks)の選択が完了すると、Git はそれらの変更を含む新しいコミットを作成し、それを元のコミットの親とします(元のコミットには選択されなかったハンクが保持されます)。その後、更新された履歴を指すように、子孫ブランチのすべてを書き換えます。

注意すべき意図的な制限がいくつかあります。history コマンドはマージコミット(merge commits)を含む履歴をサポートしておらず、マージコンフリクトが発生する操作は実行しません。設計上、git history は特定の対象に対する非インタラクティブな書き換えを目的としており、通常は git rebase –i に委ねられるような広範な履歴書き換えには向きません。

同時に、Gitのフック(hooks)内部処理が近代化されました。以前はアドホックなコードパスを介して呼び出されていた多くのビルトインフック(pre-push、post-rewrite、各種receive-packフックなど)が新しいフックAPI(hook API)の使用に移行され、これらすべてが新しい設定ベースのフック機構から恩恵を受けるようになりました。

[source, source, source]

保守作業におけるデフォルトの幾何学的リパック(geometric repacking)

本シリーズの既存読者なら、Git 2.52で導入されたgit maintenance内の新しい幾何学的戦略(geometric strategy)に関する当社の解説を覚えているかもしれません。この戦略はリポジトリの内容を検証し、オブジェクト数によって幾何級数を形成できる数のpackfile(パックファイル)を結合できるかどうかを判定して動作します。可能であれば、Gitは幾何学的リパックを実行し、フルガーベジコレクション(full garbage collection)を実行することなくリポジトリの内容を圧縮します。

2.52では、幾何学的戦略はmaintenance.strategy設定を介してオプトイン(任意選択)として利用可能でした。2.54では、手動保守のデフォルト戦略となります。つまり、戦略を指定せずにgit maintenance runを実行した場合、Gitは従来のgcタスクの代わりに幾何学的アプローチを使用するようになります。

実際、これは初期設定のままリポジトリがより効率的に保守されることを意味します。幾何学的戦略はgcが行う高コストな全リパック(all-into-one repacks)を回避し、可能であればパックを段階的に結合し、リポジトリ全体を単一のパックに統合する場合のみフルgc(full gc)にフォールバックします。その過程で、コミットグラフ(commit-graph)、reflogs、その他の補助データ構造を最新に保ちます。

設定で既にmaintenance.strategy = geometricを使用している場合、変更はありません。戦略を設定していない(または従来のgcデフォルトに依存していた)場合、幾何学的リパックの恩恵が自動的に適用され始めます。gc戦略を好む場合は引き続き利用可能で、maintenance.strategy = gcで選択できます。

[source]

氷山の一角……

大きな変更のいくつかを詳しくカバーしたところで、今回は今回のリリースにおけるその他の新機能と更新の一部をより詳しく見ていきましょう。

Gitの個別ハunks(hunks)をインタラクティブにステージングするためのツールであるgit add –pコマンドは、今回のリリースでいくつかの使いやすさの向上を受けました。JキーとKキーでハunks間を移動する際、Gitは各ハunkを以前に受け入れたかスキップしたかを示すようになり、以前の決定を覚えておく必要がなくなりました。

別個に、新しい--no-auto-advanceフラグはgit add –pがファイル間の遷移を処理する方法を変更します。通常、ファイル内のすべてのハunksに対する決定を下すと、セッションは自動的に次のものに進みます。--no-auto-advanceを使用すると、最後のハunksに対する決定後もセッションはその場に留まり、独自のペースでファイル間を移動できるようになります。これは、コミットする前に決定を全体的にレビューしたい場合に有用です。

[source, source]

git replay(作業ツリーに触れずに新しいベース上にコミットを再生する実験的コマンド)は、引き続き成熟しています。今回のリリースではいくつかの改善がもたらされました:replay はデフォルトで原子参照更新(atomic reference updates)を実行するようになり(stdout に update-ref コマンドを出力する代わりに)、新しい --revert モードを習得してコミット範囲の変更を反転させられるようになり、再生中に空になるコミットをドロップできるようになり、ルートコミットまで遡っての再生をサポートするようになりました。

[source, source, source, source]

Git の HTTP トランスポートは、HTTP 429「Too Many Requests」レスポンスを処理できるようになりました。以前は、サーバーからの 429 は致命的なエラーとして扱われていました。Git は現在リクエストを再試行でき、存在する場合はサーバーの Retry-After ヘッダーに従い、または新しい http.retryAfter 設定経由で構成可能な遅延にフォールバックします。http.maxRetries と http.maxRetryTime の新しい設定オプションは、それぞれ再試行回数と待機時間を制御するものです。

[source]

git log -L はファイル内の行の範囲の履歴を追跡しますが、歴史的には Git の標準的な diff 機械装置(diff machinery)の多くをバイパスする独自のカスタム出力パスを使用してきました。その結果、コンテンツ変更による検索用の -S および -G「ピックエックス(pickaxe)」オプションを含む、いくつかの有用なオプションと互換性がありませんでした。

今回のリリースでは、git log -L の出力を標準的な差分パイプライン(diff pipeline)にルーティングするように再構築され、初めてパッチフォーマットオプションやピックエックス検索と互換性を持つようになりました。

strbuf.c 内の strbuf_addstr() の履歴を追跡したいが、その関数内で len が追加または削除されたコミットのみを表示したいとします:

$ git log -L :strbuf_addstr:strbuf.c -S len --oneline -1

a70f8f19ad2 strbuf: introduce strbuf_addstrings() to repeatedly add a string

diff --git a/strbuf.c b/strbuf.c

--- a/strbuf.c

+++ b/strbuf.c

@@ -316,0 +316,9 @@

+void strbuf_addstrings(struct strbuf *sb, const char *s, size_t n)

+{

+ size_t len = strlen(s);

+

+ strbuf_grow(sb, st_mult(len, n));

+ for (size_t i = 0; i ”’, but that’s kind of a mouthful.

Git 2.54 では、git rebase に新しい --trailer オプションが追加され、interpret-trailers 機構(machinery)を介してすべての再生済みコミットにトレーラーが追加されるようになりました。上記の複雑なコマンドの代わりに、git rebase --trailer "Reviewed-by: A " と記述するだけで同じ効果を得られます。

[source]

コミットの署名において、GPG キーが期限切れになった場合でも、そのキーで署名された署名は有効なままです。以前は Git はこれらの署名を恐ろしい赤色で表示しており、誤解を招き、署名自体が無効であると解釈させる原因となっていました。Git は現在、期限切れのキーで作成された有効な署名を正しく「良好な(good)」署名として扱います。

[source]

git blame に新しい --diff-algorithm オプションが追加され、blame の計算時に使用される差分アルゴリズム(例:ヒストグラム、patience、minimal)を選択できるようになりました。これにより、リポジトリの履歴における変更の性質によっては、意味のある違い(およびより有用な)blame 出力が生成される場合があります。

[source]

裏側では、Gitのオブジェクトデータベース(Object Database、ODB)内部のリストラクチャリングに多大な作業が費やされました。ODBのソースAPIはプラグイン可能なバックエンド設計(pluggable backend design)を採用するようにリファクタリングされ、read_object()、write_object()、for_each_object() といった個々の関数は、ソースごとに機能ポインタ(function pointers)を通じて呼び出されるようになりました。これらは現時点ではユーザーから見える変更ではありませんが、代替ストレージバックエンドやより柔軟なオブジェクトデータベース構成といった将来の機能のための基盤を築くものです。

[source, source, source, source]

部分的なクローン(partial clone)において不足しているblobをダウンロードするための実験的コマンドである git backfill が、リビジョン(revision)およびパススペック(pathspec)引数を受け付けるようになりました。以前は、バックフィルはツリー全体からHEADに到達可能なblobを常にダウンロードしていました。現在は、特定の履歴範囲(例:git backfill main~100..main)またはパスのサブセット(例:git backfill -- '*.c')、ワイルドカードを含むパススペックにスコープを限定して実行できるようになりました。

これにより、リポジトリの特定の領域のみで履歴用blobが必要となる大規模な部分的なクローンにおいて、バックフィルの实用性が大幅に向上しました。

[source]

歴史的に、Gitのエイリアス設定(alias configuration)はASCII英数字とハイフンのみに制限されていました。つまり、“hämta”(スウェーデン語で“fetch”)や“状態”(日本語で“status”)といったエイリアス名は使用できませんでした。Git 2.54では、新しいサブセクションベースの構文によりこの制限が撤廃されました:

[alias "hämta"]

command = fetch

従来の [alias] co = checkout 構文は、ASCII名に対して引き続き動作します。新しいサブセクション形式は改行とNULLバイトを除くあらゆる文字をサポートし、生バイトとして大文字小文字を区別してマッチングされ、エイリアス定義には command キーを使用します。シェル補完(Shell completion)もこれらのエイリアスを処理するように更新されました。

[source, source]

ヒストグラム差分アルゴリズム(histogram diff algorithm)に、出力品質に関する微妙な問題の修正が適用されました。任意の差分アルゴリズムの実行後、Gitは「コンパクション(compaction)」フェーズを実行し、変更グループをシフトおよびマージしてよりクリーンな出力を生成します。場合によっては、このシフトによって変更グループがヒストグラムアルゴリズムが選択したアンカーライン(anchor lines)をまたいで移動し、技術的には正しいが視覚的に冗長な差分が生じる可能性があります。Gitは現在このようなケースを検出し、影響を受けた領域を再差分処理することで、期待される結果により一致するコンパクトな出力を生成します。

[source]

…残りの氷山

これらは最新リリースの変更の一部に過ぎません。詳細は、Gitリポジトリにある2.53および2.54のリリースノート、またはそれ以前のバージョンのものを参照してください。

「Highlights from Git 2.54」の記事は、最初にThe GitHub Blogで公開されました。

原文を表示

The open-source Git project just released Git 2.54 with features and bug fixes from over 137 contributors, 66 of them new. We last caught up with you on the latest in Git back when 2.52 was released.

To celebrate this most recent release, here is GitHub’s look at some of the most interesting features and changes introduced since last time.

 Since the last Git release we wrote about was Git 2.52, this blog post covers the highlights from both the 2.53 and 2.54 releases.

Rewrite history with git history

The Git project has a long history of providing tools to rewrite your repository’s history. git rebase –i is the most well-known, and it’s remarkably flexible: you can reorder, squash, edit, and drop commits. But that flexibility comes with complexity: an interactive rebase operates on a range of commits, updates your working tree and index as it goes, and can leave you in a conflicted state that you need to resolve before proceeding.

For simpler cases, all of that machinery can feel like overkill. If all you want to do is fix a typo in a commit message three commits back, or split one commit into two, an interactive rebase works, but requires you to set up a to-do list, mark the right commit for editing, and then drive the rebase to completion.

Git 2.54 introduces a new experimental command that is designed for exactly these simpler cases: git history. The history command currently supports two operations: reword and split.

git history reword opens your editor with the specified commit’s message and rewrites it in place, updating any branches that descend from that commit. Unlike git rebase, it doesn’t touch your working tree or index, and it can even operate in a bare repository.

git history split lets you interactively split a commit into two by selecting which hunks should be carved out into a new parent commit. The interface will look familiar if you’ve ever used add in interactive mode via git add –p:

$ git history split HEAD

diff --git a/bar b/bar

new file mode 100644

index 0000000..50810a5

--- /dev/null

+++ b/bar

@@ -0,0 +1 @@

+bar

(1/1) Stage addition [y,n,q,a,d,p,?]? y

After selecting hunks, Git creates a new commit with those changes as the parent of the original commit (which retains whatever hunks you didn’t select) and rewrites any descendent branches to point at the updated history.

There are a couple of intentional limitations worth noting. The history command does not support histories that contain merge commits, and it will refuse to perform any operation that would result in a merge conflict. By design, git history is meant for targeted, non-interactive rewrites, not the kind of open-ended history rewriting typically relegated to git rebase –i.

The history command is built on top of git replay‘s core machinery, which was itself extracted into a library as part of this work. That foundation means that git history benefits from replay‘s ability to operate without touching the working tree, making it a natural fit for scripting and automation in addition to interactive use.

This command is still marked as experimental, so its interface may evolve. Give it a try with git history reword and git history split, available in Git 2.54.

[source, source, source, source, source]

Config-based hooks

If you’ve ever wanted to share a Git hook across multiple repositories, you’ve probably had to reach for a third-party hook manager, or manually symlink scripts into each repository’s $GIT_DIR/hooks directory. That’s because, historically, Git hooks could only be defined as executable scripts living in one place: the hooks subdirectory of your .git directory (or whatever core.hooksPath points to).

That meant that if you wanted to run a linter before every commit across all of your repositories, you had to copy the script into each repository, which can be tedious and error-prone. Alternatively, you could set core.hooksPath to point to a shared directory, but that causes all of your repositories to share the exact same set of hooks, with no way to mix and match.

Git 2.54 introduces a new way to define hooks: in your configuration files. Instead of placing a script at .git/hooks/pre-commit, you can now write:

[hook "linter"]

event = pre-commit

command = ~/bin/linter --cpp20

The hook..command key specifies the command to run, and hook..event specifies which hook event should trigger it. Since this is just configuration, it can live in your per-user ~/.gitconfig, a system-wide /etc/gitconfig, or in a repository’s local config. That makes it straightforward to define a set of hooks centrally and have them apply everywhere.

Even better, you can now run multiple hooks for the same event. If you want both a linter and a secrets scanner to run before every commit, you can configure them independently:

[hook "linter"]

event = pre-commit

command = ~/bin/linter --cpp20

[hook "no-leaks"]

event = pre-commit

command = ~/bin/leak-detector

Git will run them in the order it encounters their configuration. The traditional hook script in $GIT_DIR/hooks still works, and runs last, so existing hooks are unaffected. You can see which hooks are configured (and where they come from) with git hook list:

$ git hook list pre-commit

global linter ~/bin/linter --cpp20

local no-leaks ~/bin/leak-detector

Individual hooks can be disabled without removing their configuration by setting hook..enabled = false, which is particularly handy when a hook is defined in a system-level config but you need to opt a specific repository out.

Along the way, Git’s internal handling of hooks has been modernized. Many built-in hooks that were previously invoked through ad-hoc code paths (like pre-push, post-rewrite, and the various receive-pack hooks) have been migrated to use the new hook API, meaning they all benefit from the new configuration-based hook machinery.

[source, source, source]

Geometric repacking during maintenance by default

Returning readers of this series may recall our coverage of the new geometric strategy within git maintenance, which was introduced in Git 2.52. That strategy works by inspecting the contents of your repository to determine if some number of packfiles can be combined to form a geometric progression by object count. If they can, Git performs a geometric repack, condensing the contents of your repository without needing to perform a full garbage collection.

In 2.52, the geometric strategy was available as an opt-in choice via the maintenance.strategy configuration. In 2.54, it becomes the default strategy for manual maintenance. That means when you run git maintenance run without specifying a strategy, Git will now use the geometric approach instead of the traditional gc task.

In practice, this means that your repositories will be maintained more efficiently out of the box. The geometric strategy avoids the expensive all-into-one repacks that gc performs, instead combining packs incrementally when possible and falling back to a full gc only when it would consolidate the entire repository into a single pack. Along the way, it keeps your commit-graph, reflogs, and other auxiliary data structures up to date.

If you were already using maintenance.strategy = geometric in your configuration, nothing changes. If you hadn’t set a strategy (or were relying on the old gc default), you’ll start seeing the benefits of geometric repacking automatically. The gc strategy is still available if you prefer it and can be selected with maintenance.strategy = gc.

[source]

The tip of the iceberg…

Now that we’ve covered some of the larger changes in more detail, let’s take a closer look at a selection of some other new features and updates in this release.

The git add –p command, Git’s tool for interactively staging individual hunks, received a handful of usability improvements in this release. When navigating between hunks with the J and K keys, Git now shows whether you’ve previously accepted or skipped each hunk, so you don’t have to remember your earlier decisions.

Separately, a new --no-auto-advance flag changes how git add –p handles the transition between files. Normally, once you’ve made a decision on every hunk in a file, the session automatically moves on to the next one. With --no-auto-advance, the session stays put after you’ve decided on the last hunk, letting you use to move between files at your own pace. This can be useful when you want to review your decisions holistically before committing to them.

[source, source]

git replay, the experimental command for replaying commits onto a new base without touching the working tree, continues to mature. This release brings several improvements: replay now performs atomic reference updates by default (instead of printing update-ref commands to stdout), has learned a new --revert mode that reverses the changes from a range of commits, can now drop commits that become empty during replay, and supports replaying all the way down to the root commit.

[source, source, source, source]

Git’s HTTP transport now handles HTTP 429 “Too Many Requests” responses. Previously, a 429 from the server would be treated as a fatal error. Git can now retry the request, honoring the server’s Retry-After header when present, or fall back to a configurable delay via the new http.retryAfter setting. The new http.maxRetries and http.maxRetryTime configuration options provide control over how many times to retry and how long to wait, respectively.

[source]

git log –L, which traces the history of a range of lines within a file, has historically used its own custom output path that bypassed much of Git’s standard diff machinery. As a result, it was incompatible with several useful options, including the -S and -G “pickaxe” options for searching by content changes.

This release reworks git log –L to route its output through the standard diff pipeline, making it compatible with patch formatting options and pickaxe searches for the first time.

Say you want to trace the history of strbuf_addstr() in strbuf.c, but only see commits where len was added or removed within that function:

$ git log -L :strbuf_addstr:strbuf.c -S len --oneline -1

a70f8f19ad2 strbuf: introduce strbuf_addstrings() to repeatedly add a string

diff --git a/strbuf.c b/strbuf.c

--- a/strbuf.c

+++ b/strbuf.c

@@ -316,0 +316,9 @@

+void strbuf_addstrings(struct strbuf *sb, const char *s, size_t n)

+{

+ size_t len = strlen(s);

+

+ strbuf_grow(sb, st_mult(len, n));

+ for (size_t i = 0; i ”’, but that’s kind of a mouthful.

In Git 2.54, git rebase learned a new --trailer option, which appends a trailer to every rebased commit via the interpret-trailers machinery. Instead of the monstrosity above, we can now write git rebase --trailer "Reviewed-by: A " and achieve the same effect.

[source]

When signing commits, a signature remains valid even when it was signed with a GPG key that has since expired. Previously, Git displayed these signatures with a scary red color, which could be misleading and lead you to interpret the signature itself as invalid. Git now correctly treats a valid signature made with a since-expired key as a good signature.

[source]

git blame learned a new --diff-algorithm option, allowing you to select which diff algorithm (e.g., histogram, patience, or minimal) is used when computing blame. This can sometimes produce meaningfully different (and more useful) blame output, depending on the nature of the changes in your repository’s history.

[source]

Under the hood, a significant amount of work went into restructuring Git’s object database (ODB) internals. The ODB source API has been refactored to use a pluggable backend design, with individual functions like read_object(), write_object(), and for_each_object() now dispatched through function pointers on a per-source basis. While none of this is user-visible today, it lays the groundwork for future features like alternative storage backends or more flexible object database configurations.

[source, source, source, source]

git backfill, the experimental command for downloading missing blobs in a partial clone, learned to accept revision and pathspec arguments. Previously, backfill would always download blobs reachable from HEAD across the entire tree. You can now scope it to a particular range of history (e.g., git backfill main~100..main) or a subset of paths (e.g., git backfill -- '*.c'), including pathspecs with wildcards.

This makes backfill much more practical for large partial clones where you only need historical blobs for a specific area of the repository.

[source]

Git’s alias configuration has historically been limited to ASCII alphanumeric characters and hyphens. That meant alias names like “hämta” (Swedish for “fetch”) or “状態” (Japanese for “status”) were off-limits. Git 2.54 lifts that restriction with a new subsection-based syntax:

[alias "hämta"]

command = fetch

The traditional [alias] co = checkout syntax continues to work for ASCII names. The new subsection form supports any characters (except newlines and NUL bytes), is matched case-sensitively as raw bytes, and uses a command key for the alias definition. Shell completion has been updated to handle these aliases as well.

[source, source]

The histogram diff algorithm received a fix for a subtle output quality issue. After any diff algorithm runs, Git performs a “compaction” phase that shifts and merges change groups to produce cleaner output. In some cases, this shifting could move a change group across the anchor lines that the histogram algorithm had chosen, producing a diff that was technically correct but visually redundant. Git now detects when this happens and re-diffs the affected region, resulting in tighter output that better matches what you would expect.

[source]

…the rest of the iceberg

That’s just a sample of changes from the latest release. For more, check out the release notes for 2.53 and 2.54, or any previous version in the Git repository.

The post Highlights from Git 2.54 appeared first on The GitHub Blog.

この記事をシェア

関連記事

GitHub Blog★32026年5月26日 01:00

GitHub for Beginners:VS Code で Git と GitHub を始める方法

GitHub は、Microsoft が提供する無料のコードエディタ VS Code の機能を活用し、Git や GitHub の基本的な操作を学ぶためのチュートリアルシリーズを開始した。これにより開発者はコンテキストスイッチングを減らし効率的に作業できる。

GitHub Changelog2026年3月26日 02:07

個別コミットへのコメントを無効化可能に

GitHubが、リポジトリ管理者が個別のコミットへのコメントを無効化できる機能を追加した。これにより、古いコミットへの不要なコメントによるノイズを管理者が管理しやすくなる。

Simon Willison Blog★32026年3月22日 07:08

コーディングエージェントでのGitの活用

開発者Simon Willison氏が、Gitをコーディングエージェントと連携させる重要性を説明している。Gitによるバージョン管理はコード変更の記録や誤りの調査・修正を可能にし、エージェントは基本的・高度なGit機能を活用できる。

ニュース一覧に戻る元記事を読む