Git ブランチが孤立しているかどうかを確認する方法

GitGitBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Git ブランチが孤立しているかどうかを確認する方法を学びます。リポジトリの最初のコミットの特徴である、親コミットのないコミットを理解するために、git log コマンドを調べます。

さらに、git branch --no-merged コマンドを使用して、変更が現在のブランチに統合されていないブランチを特定します。最後に、新しい孤立ブランチを作成して調べることで、これらの概念をテストします。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BranchManagementGroup -.-> git/branch("Handle Branches") git/BranchManagementGroup -.-> git/checkout("Switch Branches") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/add -.-> lab-560048{{"Git ブランチが孤立しているかどうかを確認する方法"}} git/status -.-> lab-560048{{"Git ブランチが孤立しているかどうかを確認する方法"}} git/commit -.-> lab-560048{{"Git ブランチが孤立しているかどうかを確認する方法"}} git/branch -.-> lab-560048{{"Git ブランチが孤立しているかどうかを確認する方法"}} git/checkout -.-> lab-560048{{"Git ブランチが孤立しているかどうかを確認する方法"}} git/log -.-> lab-560048{{"Git ブランチが孤立しているかどうかを確認する方法"}} end

親コミットのないコミットを git log で確認する

このステップでは、git log コマンドをさらに調べ、特に親コミットのないリポジトリでの動作を見ていきます。これはリポジトリの最初のコミットの場合です。

まず、my-time-machine ディレクトリにいることを確認してください。

cd ~/project/my-time-machine

では、--pretty=oneline オプションを指定して git log コマンドを使用しましょう。このオプションは各コミットを 1 行で表示するため、履歴を簡潔に見るのに便利です。また、--max-count=1 オプションを追加して、最新のコミットのみを表示します。

git log --pretty=oneline --max-count=1

以下のような出力が表示されるはずです。

a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master) Send a message to the future

この出力には、コミットハッシュ(長い文字列)、コミットが属するブランチ (HEAD -> master)、およびコミットメッセージが表示されています。

では、このコミットの親コミットを見てみましょう。これが最初のコミットであるため、親コミットはありません。git log--no-walk=parent オプションを使用して、親コミットを表示しようとします。

git log --no-walk=parent --pretty=oneline --max-count=1

このコマンドは、おそらく何も出力されないか、表示する親コミットがないことを示すエラーメッセージが表示されます。これは最初のコミットにおける期待される動作です。

最初のコミットには親コミットがないことを理解することは、Git が履歴を構築する仕組みを理解するための基本です。それ以降の各コミットには 1 つ以上の親コミットがあり、変更の連鎖を形成します。

git branch --no-merged を使用する

このステップでは、git branch コマンド、特に --no-merged オプションについて学びます。このオプションは、現在のブランチにまだ統合されていない変更を含むブランチを特定するのに役立ちます。

まず、新しいブランチを作成しましょう。ブランチは、新しい機能や実験をメインのタイムライン (master) に影響を与えずに作業できる別のタイムラインと考えてください。

~/project/my-time-machine ディレクトリにいることを確認してください。

cd ~/project/my-time-machine

では、experiment という名前の新しいブランチを作成します。

git branch experiment

このコマンドは新しいブランチを作成しますが、そのブランチに切り替えることはありません。あなたはまだ master ブランチにいます。

git branch コマンドを使用して、リポジトリ内のすべてのブランチをリストアップしましょう。

git branch

以下のような出力が表示されるはずです。

  experiment
* master

アスタリスク (*) は、現在いるブランチを示しており、この場合は master です。

では、git branch --no-merged コマンドを使用しましょう。このコマンドは、現在のブランチ (master) にマージされていないブランチをリストアップします。

git branch --no-merged

以下のように表示されるはずです。

  experiment

この出力は、experiment ブランチには master ブランチに存在しない変更が含まれていることを示しています。この場合、experiment ブランチを master から作成したばかりで、まだ何も変更を加えていないので、これは直感に反するように思えるかもしれません。しかし、--no-merged オプションは、その「先端」のコミットが現在のブランチの「先端」から到達できないブランチを表示するように設計されています。現在、experimentmaster と同じコミットを指していますが、masterexperiment を「マージ」していない(この文脈では意味がない)ため、依然として experiment がリストされます。

実際のシナリオでは、通常、新しいブランチを作成し、その上でいくつかのコミットを行い、その後、メインブランチ(master など)から git branch --no-merged を使用して、マージする準備ができている機能ブランチを確認します。

新しい孤立ブランチ (orphan branch) でテストする

このステップでは、新しい「孤立ブランチ (orphan branch)」を作成します。孤立ブランチとは、以前のブランチの履歴を持たないブランチです。タイムマシンでまったく新しいタイムラインを始めるようなものです。これは、ドキュメント用のブランチやウェブサイトの gh-pages ブランチなど、メインコードの履歴を含めたくない場合に便利です。

~/project/my-time-machine ディレクトリにいることを確認してください。

cd ~/project/my-time-machine

では、new-start という名前の新しい孤立ブランチを作成しましょう。

git checkout --orphan new-start

以下のような出力が表示されるはずです。

Switched to a new branch 'new-start'

これで new-start ブランチに切り替わりました。master ブランチのファイルが作業ディレクトリにまだ存在することに注意してください。これは、git checkout --orphan が新しいルートコミット用に作業ディレクトリとインデックスを準備するが、既存のファイルを削除しないためです。

ステータスを確認しましょう。

git status

以下のような表示がされるはずです。

On branch new-start

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        message.txt

nothing added to commit but untracked files present (use "git add" to track)

new-start ブランチの履歴は master と完全に分離されているため、Git は message.txt を追跡されていないファイルとして認識しています。

この孤立ブランチで本当に新しく始めるには、通常、古いファイルを削除してから、このブランチ用の新しいコンテンツを追加します。message.txt ファイルを削除しましょう。

rm message.txt

では、もう一度ステータスを確認しましょう。

git status

以下のように表示されるはずです。

On branch new-start

No commits yet

nothing to commit (create/copy files and use "git add" to track)

作業ディレクトリは現在クリーンで、新しい独立したタイムラインの最初のコミットを作成する準備ができました。

このブランチに固有の新しいファイルを作成しましょう。

echo "This is a fresh start!" > readme.md

新しいファイルをステージングエリアに追加します。

git add readme.md

そして、最後に new-start ブランチの最初のコミットを作成します。

git commit -m "Initial commit for new-start branch"

以下のような出力が表示されるはずです。

[new-start (root-commit) a1b2c3d] Initial commit for new-start branch
 1 file changed, 1 insertion(+)
 create mode 100644 readme.md

このコミットも master ブランチの最初のコミットと同じように "(root-commit)" であることに注意してください。これは、親コミットがなく、新しい履歴の始まりであることを確認しています。

では、このブランチのログを見てみましょう。

git log --pretty=oneline

直前に作成したコミットのみが表示されるはずです。

a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> new-start) Initial commit for new-start branch

これは、new-start ブランチが master ブランチとは別の独立した履歴を持っていることを示しています。

まとめ

この実験 (Lab) では、Git ブランチが孤立しているかどうかを確認する方法を学びました。まず、git log コマンドを調べ、特に --no-walk=parent を使用してリポジトリ内の最初のコミットに親コミットがないことを識別する方法を学びました。これにより、最初のコミットには親がないという Git 履歴の基本概念が示されました。

次に、git branch --no-merged コマンドを紹介しました。このコマンドは、現在のブランチにマージされていないブランチをリストするために使用され、孤立している可能性があるブランチや統合されていない変更を含むブランチを識別するための重要な手法です。この実験では、新しい孤立ブランチを作成して調べることで、これらの概念をテストするステップも含まれていました。