Traffine I/O

日本語

2023-03-04

git コマンド

Git とは

Gitは、ソースコードを管理し、他の開発者とソフトウェアプロジェクトで協力するための、無料でオープンソースの分散型バージョン管理システムです。

Linuxオペレーティングシステムを作成したLinus Torvalds氏が作成し、世界でもっとも広く使われているバージョン管理システムとなっています。

Gitを使用することで、開発者はコードの変更履歴を追跡し、他の人と協力し、何か問題が発生した場合に簡単に変更を元に戻すことができます。その人気により、小規模なスタートアップから大企業までのソフトウェア開発チームにとって必須のツールとなっています。

基本的な Git コマンド

ここでは、基本的なGitコマンドを紹介します。

Git Add

git addコマンドは、変更をリポジトリにコミットする前に、開発者が変更をステージングすることができるため、Gitワークフローの重要な部分です。

作業ディレクトリ内のファイルを変更すると、Gitは自動的にそれらを変更されたファイルとして追跡します。ただし、これらの変更は自動的にステージングエリアに追加されないため、Gitは変更をコミットする準備ができた変更をステージングエリアに保持します。git addコマンドは、変更を作業ディレクトリからステージングエリアに移動するために使用されます。

以下は、git addコマンドの使用例です。

bash
$ git add file.txt

この例では、git addコマンドで「file.txt」ファイルをステージング領域に追加しています。ワイルドカードを使用して複数のファイルを一度に追加することもできます。

bash
$ git add *.txt

このコマンドは、現在のディレクトリにある全てのテキストファイルをステージング領域に追加します。

また、以下のようにして、作業ディレクトリのファイルに加えられた全ての変更をステージングすることもできます。

bash
$ git add .

ドット(.)は現在のディレクトリを表し、このコマンドはディレクトリ内の全てのファイルに加えられた変更をステージングします。

Git Commit

git commitコマンドは、ローカルリポジトリに加えられた変更を保存するために使用されます。一意のID、タイムスタンプ、およびコミットメッセージを持つ新しいコミットが作成されます。コミットメッセージは、コミットで行われた変更の簡単な説明である必要があります。

以下は、git commitコマンドの使用例です。

bash
$ git commit -m "ログインページに新しい機能を追加"

この例では、コミットメッセージは「ログインページに新しい機能を追加しました」です。-mフラグは、コマンドで直接コミットメッセージを指定するために使用されます。このコマンドを実行すると、作業ディレクトリでの変更がローカルリポジトリに保存されます。変更をリモートリポジトリにプッシュするには、git pushコマンドを使用する必要があります。

Git Push

git pushコマンドは、ローカルリポジトリの内容をリモートリポジトリにアップロードするために使用されます。これは、他の人がアクセスできるようにリモートリポジトリに変更を公開するために使用されるコマンドです。

以下は、git pushコマンドの使用例です。

bash
$ git push origin master

この例では、masterブランチをoriginリモートにプッシュしています。このコマンドを実行すると、Gitはリモートリポジトリに変更をプッシュしようとします。他の人が行った変更と競合する変更を行った場合、Gitは競合を解決するまで変更をプッシュできないことがあります。

コミットハッシュを使用して、特定のコミットをプッシュすることもできます。

bash
$ git push origin abc123

このコマンドは、ハッシュabc123のコミットをoriginリモートにプッシュします。

変更をプッシュするには、リモートリポジトリに書き込みアクセス権を持っている必要があることに注意してください。書き込みアクセス権がない場合は、変更をプッシュする前にリポジトリの所有者に許可を求める必要があります。

Git Pull

git pullコマンドは、リモートリポジトリに行われた変更をローカルリポジトリに更新するために使用されます。複数の開発者が同じプロジェクトで作業し、他の人が行った変更を自分のローカルリポジトリに反映させたい場合に便利です。

GitHubからリポジトリをクローンして、リモートリポジトリに行われた最新の変更を取得したい場合、ローカルリポジトリで次のコマンドを実行できます。

bash
$ git pull

これにより、リモートリポジトリから最新の変更が取得され、ローカルリポジトリにマージされます。ローカルの変更とリモートの変更に競合がある場合、Gitはマージが完了する前に競合を解決するように促します。

git pullは、git fetchコマンドとgit mergeコマンドの組み合わせです。git fetchコマンドは、リモートリポジトリから最新の変更をダウンロードし、git mergeコマンドはそれらの変更をローカルリポジトリにマージします。アップデートプロセスをより細かく制御したい場合は、これらのコマンドを別々に実行することもできます。

Git Status

git statusコマンドは、ローカルリポジトリの現在のステータスを表示するために使用されます。最後のコミット以降にファイルに加えられた変更、コミットのためにステージングされ、準備ができているファイル、そしてまだGitで追跡されていないファイルを表示します。

Gitリポジトリがあり、「index.html」という名前のファイルに変更を加えた場合、リポジトリのステータスを表示するには、次のコマンドを実行できます。

bash
$ git status

これにより、次のような出力が表示されます。

bash
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   index.html

no changes added to commit (use "git add" and/or "git commit -a")

この例では、Gitは、「index.html」ファイルに変更を加えたことを伝えていますが、それらの変更はコミットのためにステージングされていません。Gitはまた、git addコマンドを使用して変更をコミットのためにステージングできることを提案しています。

Git Log

git logコマンドは、Gitリポジトリのコミット履歴を表示するために使用されます。リポジトリで行われた全てのコミットのリストを表示し、コミットメッセージ、著者、日付、コミットハッシュを含みます。

以下は、git logコマンドの例です。

bash
commit c0c0a7e92e49239e4d7d8f25d4f764da4fe4f17d
Author: John Smith <john.smith@example.com>
Date:   Tue Mar 2 14:07:31 2021 -0500

    Updated index.html file

commit 12040db00cc28a71903c2d8e4f4daa4c5e5b5c8e
Author: Jane Doe <jane.doe@example.com>
Date:   Mon Mar 1 10:44:12 2021 -0500

    Added new styles to style.css file

commit 8c8a49a2a9ce9dc3d76a3e8c1f618ee45ec54a71
Author: John Smith <john.smith@example.com>
Date:   Sun Feb 28 16:15:52 2021 -0500

    Initial commit

上記の出力は、リポジトリで行われた全てのコミットのリストを逆年代順に示しています。コミットハッシュは英数字の文字列として表示され、各コミットには著者、日付、コミットメッセージがあります。この例では、John Smithが最新のコミットでindex.htmlファイルを更新したこと、Jane Doeが2番目に最近のコミットでstyle.cssファイルに新しいスタイルを追加したことがわかります。リスト中でもっとも古いコミットは、John Smithによって作成された最初のコミットです。

Git におけるブランチ

ブランチはGitの中核的な機能であり、開発者がコードベースの異なるバージョンで同時に作業できるようにします。Gitにおいて、ブランチとは本質的に、メインのコードベースから分岐した別々の開発ラインです。これにより、開発者はメインブランチに影響を与えることなく、コードベースを変更したり、他の開発者と独立して新しい機能やバグ修正を作業することができます。

Gitで新しいブランチを作成すると、リポジトリの現在のコミットを基にして作成されます。これにより、新しいブランチでファイルに変更を加えても、それらの変更がメインブランチに影響を与えることはありません。ブランチの変更がテストされ承認された後、Gitのマージ機能を使用してメインブランチにマージできます。

複雑なソフトウェア開発プロジェクトを管理するには、特に複数の開発者やチームを含む場合には、ブランチを効果的に使用することが不可欠です。これにより、より効率的なコラボレーション、より簡単なテスト、コード変更のより良い組織化が可能になります。Gitの強力なブランチ機能を使用することで、開発者は新しいアイデアを試したり、コードベースを変更することができますが、プロジェクトの他の部分に影響を与えるリスクを回避することができます。

Git Branch

Gitでは、ブランチはプロジェクトの異なる部分で作業することができ、本体のコードベースに影響を与えずに開発するための別々の開発ラインです。git branchコマンドを使用して、ブランチの作成、一覧表示、削除を行うことができます。

例えば、プロジェクトで作業していて、新しい機能の作業に取り掛かるために新しいブランチを作成したい場合、次のコマンドを使用してfeature-branchという新しいブランチを作成することができます。

bash
$ git branch feature-branch

これにより、現在のブランチ(通常はmaster)をベースに新しいブランチが作成されます。その後、git checkoutコマンドを使用して新しいブランチに切り替えることができます。

bash
$ git checkout feature-branch

これで、行った変更はfeature-branchブランチにのみ影響を与え、masterブランチには影響を与えません。作業が終了したら、git mergeコマンドを使用して変更をmasterブランチにマージすることができます。

リポジトリ内の全てのブランチを一覧表示する場合は、次のコマンドを使用できます。

bash
$ git branch

これにより、リポジトリ内の全てのブランチがリスト表示され、現在のブランチがアスタリスクで強調表示されます。

ブランチを削除する場合は、次のコマンドを使用できます。

bash
$ git branch -d feature-branch

これにより、feature-branchブランチが削除されます。ただし、ブランチがまだマージされていない場合、Gitはブランチを削除する前に警告を表示します。

Git Checkout

Gitでは、git checkoutコマンドを使用して、異なるブランチ間を切り替えたり、新しいブランチを作成したり、コミット履歴をナビゲートしたりします。以下にいくつかの例を示します。

既存のブランチに切り替える

既存のブランチに切り替えるには、git checkoutコマンドに続けてブランチ名を使用します。例えば、developブランチに切り替えるには、次のように実行します。

bash
$ git checkout develop

これにより、developブランチに切り替わり、そのブランチ内のファイルとコミットを反映した作業ディレクトリが更新されます。

新しいブランチを作成する

-bフラグを使用して、新しいブランチを作成して切り替えることができます。例えば、feature-branchという新しいブランチを作成して切り替えるには、次のように実行します。

bash
$ git checkout -b feature-branch

これにより、現在のブランチ(通常はmaster)を基に新しいブランチが作成され、feature-branchに切り替わります。

コミット履歴をナビゲートする

git checkoutを使用して、リポジトリのコミット履歴をナビゲートすることができます。例えば、プロジェクトが2つ前のコミット時点でどのようになっていたかを確認する場合は、次のように実行します。

bash
$ git checkout HEAD~2

これにより、2つ前のコミットに作業ディレクトリが移動します。その時点で変更を加えたり、ファイルを表示したりすることができます。

git checkoutでブランチを切り替えると、Gitによってトラッキングされているファイルに対して変更がある場合は、コミットされていない場合は失われることに注意してください。Gitは警告を表示するため、ブランチを切り替える前に変更をコミットするか、スタッシュする必要があります。

Git Merge

Gitでは、git mergeコマンドを使用して、異なるブランチからの変更を1つのブランチに統合します。

new-featureというフィーチャーブランチで作業しており、これらの変更をmasterブランチにマージしたいとします。最初に、 git checkoutコマンドを使用してmasterブランチに切り替えます。

bash
$ git checkout master

次に、 git mergeコマンドを使用し、マージしたいブランチの名前を指定します(この場合はnew-feature)。

bash
$ git merge new-feature

Gitは、new-featureブランチからの変更をmasterブランチにマージしようとします。もし衝突がある場合(つまり、同じコード行に影響を与える両方のブランチの変更がある場合)、Gitはマージを完了する前に解決するように求めます。

マージが完了すると、 new-featureブランチからの変更がmasterブランチに統合されます。その後、 new-featureブランチが必要なくなった場合は削除することができます。

Git Workflow

Gitのワークフローは、ソフトウェア開発プロジェクトでバージョン管理にGitを使用するための手順を説明するプロセスです。ワークフローは、コードの変更方法、レビュー方法、コードベースに統合する方法を定義します。

Gitで従うことができる様々なワークフローがありますが、ブランチを使用して変更を分離し、変更を定期的にコミットし、コードレビューを通じて他の開発者と協力するなどの共通の原則を共有しています。

Gitワークフローは、チームが効果的に協力し、高品質のコードを提供するために構造化された組織的なアプローチを提供します。 Gitワークフローに従うことで、開発者はコードの変更が適切に追跡、レビュー、および統合されることを確認し、より効率的で効果的な開発プロセスを実現できます。

Git Stash

Gitでは、git stashコマンドを使用して、変更をコミットせずに一時的にブランチに保存できます。これは、別のブランチに切り替えたり、別のタスクに取り組んだりする必要がある場合に役立ちます。次に例を示します。

new-featureというフィーチャーブランチで作業していて、変更を加えたがまだコミットする準備ができていない場合を考えます。ただし、重要なバグ修正に取り組むために別のブランチに切り替える必要があります。git stashコマンドを使用して変更を一時的に保存できます。

bash
$ git stash

このコマンドは変更を保存し、作業ディレクトリを最後にコミットされた状態にリセットします。他のブランチに切り替えてバグ修正に取り組むことができます。

bash
$ git checkout bug-fix

バグ修正が完了したら、new-featureブランチに戻り、git stash applyコマンドを使用して保存した変更を取得できます。

bash
$ git checkout new-feature
$ git stash apply

Gitでは、git rebaseコマンドを使用して、1つのブランチから別のブランチに変更を統合します。これにより、異なるブランチの上にコミットを再適用することができ、リポジトリの履歴を簡素化し、理解しやすくすることができます。以下は例です。

featureブランチとmasterブランチがあると仮定します。featureブランチで作業していたが、その間にmasterブランチに新しい変更が加えられたため、その変更をfeatureブランチに含めたい場合、git rebaseコマンドを使用します。

Git Rebase

Gitでは、git rebaseコマンドを使用して、1つのブランチから別のブランチに変更を統合します。これにより、異なるブランチの上にコミットを再適用することができ、リポジトリの履歴を簡素化し、理解しやすくすることができます。

featureブランチとmasterブランチがあると仮定します。featureブランチで作業していたが、その間にmasterブランチに新しい変更が加えられたため、その変更をfeatureブランチに含めたい場合、git rebaseコマンドを使用します。

bash
$ git checkout feature
$ git rebase master

このコマンドは、featureブランチの全てのコミットを現在のmasterブランチの上に再適用し、masterからの変更をfeatureに統合します。2つのブランチ間に競合がある場合は、Gitが解決するよう促します。

リベースが完了したら、通常通りmasterブランチに戻り、featureブランチから変更をマージできます。

bash
$ git checkout master
$ git merge feature

これにより、git rebaseを使用して統合したmasterからの変更を含め、featureブランチの変更がマージされます。

Git Revert

Gitでは、git revertコマンドを使用して特定のコミットを元に戻すことができます。これは、元のコミットで行われた変更を取り消す新しいコミットを作成することによって行われます。これはgit resetコマンドとは異なり、コミットを完全に削除してコミット履歴を書き換えるものではありません。

masterという名前のブランチがあるとし、コードにバグを導入するコミットを作成したとします。

bash
$ git checkout master
$ git commit -m "Introduce bug into code"

このコミットを取り消すには、git revertコマンドを使用できます。

bash
$ git revert HEAD

このコマンドは、以前のコミットで行われた変更を取り消す新しいコミットを作成します。リポジトリ内の他の変更との間に競合がある場合、Gitは新しいコミットを作成する前に解決するように促します。

リバートコミットが作成されたら、通常どおり変更をリモートリポジトリにプッシュできます。

bash
$ git push origin master

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!