Gitの使用方法:リファレンスガイド
Gitチートシート
序章
開発者とオープンソースソフトウェアメンテナのチームは通常、コラボレーションをサポートする分散バージョン管理システムであるGitを介してプロジェクトを管理します。
このチートシートスタイルガイドは、Gitリポジトリでの作業と共同作業に役立つコマンドのクイックリファレンスを提供します。 Gitをインストールして構成するには、「オープンソースに貢献する方法:Git入門」を必ずお読みください。
このガイドの使用方法:
- このガイドは、自己完結型のコマンドラインスニペットを含むチートシート形式です。
- 完了しようとしているタスクに関連するセクションにジャンプします。
- このガイドのコマンドに
highlighted text
が表示されている場合、このテキストは独自のリポジトリ内のコミットとファイルを参照している必要があることに注意してください。
セットアップと初期化
次のコマンドを使用してGitのバージョンを確認します。これにより、Gitがインストールされていることも確認されます。
git --version
Gitを使用すると、ローカルマシン上のすべてのリポジトリに適用されるいくつかの設定を構成できます。 たとえば、Gitがローカルリポジトリに加えた変更をクレジットするために使用するユーザー名を構成します。
git config --global user.name “firstname lastname”
各履歴マーカーに関連付ける電子メールアドレスを構成します。
git config --global user.email “valid-email”
好みのテキストエディタも設定します。
git config --global core.editor “nano”
init
を使用して、現在の作業ディレクトリをGitリポジトリとして初期化できます。
git init
リモートでホストされている既存のGitリポジトリをコピーするには、リポジトリのURLまたはサーバーの場所でgit clone
を使用します(後者の場合はssh
を使用します)。
git clone https://www.github.com/username/repo-name
現在のGitディレクトリのリモートリポジトリを表示します。
git remote
より詳細な出力を得るには、-v
フラグを使用します。
git remote -v
Gitアップストリームを追加します。これはURLにすることも、サーバーでホストすることもできます(後者の場合、ssh
に接続します)。
git remote add upstream https://www.github.com/username/repo-name
演出
ファイルを変更し、次のコミットに進むようにマークを付けると、そのファイルはステージングされたファイルと見なされます。
追加された、ステージングされていないファイルやステージングされているファイルなど、Gitリポジトリのステータスを確認します。
git status
変更されたファイルをステージングするには、add
コマンドを使用します。このコマンドは、コミット前に複数回実行できます。 次のコミットに含める後続の変更を行う場合は、add
を再度実行する必要があります。
add
で特定のファイルを指定できます。
git add my_script.py
.
を使用すると、.
で始まるファイルを含め、現在のディレクトリ内のすべてのファイルを追加できます。
git add .
現在のディレクトリ内のすべてのファイルとサブディレクトリ内のファイルを追加する場合は、-all
または-A
フラグを使用できます。
git add -A
reset
を使用すると、作業ディレクトリ内の変更を保持しながら、ステージングからファイルを削除できます。
git reset my_script.py
コミット
更新をステージングすると、それらをコミットする準備が整います。これにより、リポジトリに加えた変更が記録されます。
ステージングされたファイルをコミットするには、意味のあるコミットメッセージを指定してcommit
コマンドを実行し、コミットを追跡できるようにします。
git commit -m "Commit message"
追跡されたすべてのファイルを1つのステップでコミットすることにより、それらのステージングを凝縮できます。
git commit -am "Commit message"
コミットメッセージを変更する必要がある場合は、--amend
フラグを使用して変更できます。
git commit --amend -m "New commit message"
ブランチ
Gitのブランチは、リポジトリ内のコミットの1つへの移動可能なポインターであり、作業を分離し、機能の開発と統合を管理することができます。 Gitのドキュメントを読むと、ブランチの詳細を知ることができます。
branch
コマンドを使用して、現在のすべてのブランチを一覧表示します。 現在アクティブなブランチの横にアスタリスク(*
)が表示されます。
git branch
新しいブランチを作成します。 新しいブランチに切り替えるまで、現在アクティブなブランチに留まります。
git branch new-branch
既存のブランチに切り替えて、現在の作業ディレクトリにチェックアウトします。
git checkout another-branch
-b
フラグを使用して、新しいブランチの作成とチェックアウトを統合できます。
git checkout -b new-branch
ブランチ名の名前を変更します。
git branch -m current-branch-name new-branch-name
指定したブランチの履歴を、現在作業しているブランチにマージします。
git merge branch-name
競合がある場合は、マージを中止します。
git merge --abort
特定のコミットを選択して、特定のコミットを参照する文字列を使用してcherry-pick
とマージすることもできます。
git cherry-pick f7649d0
ブランチをマージし、ブランチが不要になったら、次のように削除できます。
git branch -d branch-name
ブランチをmainにマージしていないが、それを削除したい場合は、ブランチをforce削除できます。
git branch -D branch-name
コラボレーションと更新
リモートアップストリームなどの別のリポジトリから変更をダウンロードするには、fetch
を使用します。
git fetch upstream
フェッチされたコミットをマージします。 一部のリポジトリでは、main
の代わりにmaster
を使用する場合があることに注意してください。
git merge upstream/main
ローカルブランチコミットをリモートリポジトリブランチにプッシュまたは送信します。
git push origin main
トラッキングリモートブランチからコミットをフェッチしてマージします。
git pull
検査
現在アクティブなブランチのコミット履歴を表示します。
git log
特定のファイルを変更したコミットを表示します。 これは、ファイルの名前変更に関係なく、ファイルに従います。
git log --follow my_script.py
一方のブランチにあり、もう一方のブランチにはないコミットを表示します。 これにより、b-branch
にないa-branch
のコミットが表示されます。
git log a-branch..b-branch
参照ログ(reflog
)を調べて、ブランチのヒントやその他の参照がリポジトリ内で最後に更新されたのはいつかを確認します。
git reflog
コミット文字列またはハッシュを介して、Git内のオブジェクトをより人間が読める形式で表示します。
git show de754f5
変更を表示
git diff
コマンドは、コミット、ブランチなどの間の変更を表示します。 Gitのドキュメントで詳細を読むことができます。
ステージング領域にある変更されたファイルを比較します。
git diff --staged
a-branch
にはあるが、b-branch
にはないものの差分を表示します。
git diff a-branch..b-branch
2つの特定のコミット間の差分を表示します。
git diff 61ce3e6..e221d9c
プロジェクトからファイルを削除してパスの変更を追跡し、この削除をコミット用にステージングします。
git rm file
または、既存のファイルパスを変更してから、移動をステージングします。
git mv existing-path new-path
コミットログをチェックして、パスが移動されていないかどうかを確認します。
git log --stat -M
隠し場所
コードに変更を加えたことに気付く場合もありますが、終了する前に、別の作業を開始する必要があります。 これまでに行った変更をコミットする準備はまだ整っていませんが、作業を失いたくありません。 git stash
コマンドを使用すると、ローカルの変更を保存して、最新のHEAD
コミットに沿った作業ディレクトリに戻すことができます。
あなたの現在の仕事を隠してください:
git stash
あなたが現在隠しているものを見てください:
git stash list
隠し場所には、stash@{0}
、stash@{1}
などの名前が付けられます。
特定の隠し場所に関する情報を表示します。
git stash show stash@{0}
スタッシュを保持したまま、現在のスタッシュにあるファイルをスタッシュから取り出すには、apply
を使用します。
git stash apply stash@{0}
ファイルを隠し場所から取り出したいが、隠し場所が不要になった場合は、pop
を使用します。
git stash pop stash@{0}
特定のスタッシュに保存されているファイルが不要になった場合は、スタッシュをdrop
できます。
git stash drop stash@{0}
複数のスタッシュを保存していて、それらを使用する必要がなくなった場合は、clear
を使用してそれらを削除できます。
git stash clear
ファイルを無視する
ファイルをローカルのGitディレクトリに保持したいが、プロジェクトにコミットしたくない場合は、これらのファイルを.gitignore
ファイルに追加して、競合が発生しないようにすることができます。
nanoなどのテキストエディタを使用して、.gitignore
ファイルにファイルを追加します。
nano .gitignore
.gitignore
ファイルの例を確認するには、GitHubの.gitignoreテンプレートリポジトリをご覧ください。
リベース
リベースを使用すると、ベースとなるコミットを変更することでブランチを移動できます。 リベースを使用すると、コミットを押しつぶしたり、言い換えたりできます。
リベースするコミットの数(以下の場合は5
)を呼び出すことにより、リベースを開始できます。
git rebase -i HEAD~5
または、特定のコミット文字列またはハッシュに基づいてリベースすることもできます。
git rebase -i 074a4e5
コミットを破棄または言い換えたら、プロジェクトのアップストリームコードの最新バージョンに加えてブランチのリベースを完了することができます。 一部のリポジトリでは、main
の代わりにmaster
を使用する場合があることに注意してください。
git rebase upstream/main
リベースと更新の詳細については、プルリクエストのリベースと更新の方法を参照してください。これは、あらゆるタイプのコミットにも適用できます。
元に戻すとリセット
revert
を使用すると、特定のコミットで行った変更を元に戻すことができます。 これを実現するには、作業ツリーをクリーンにする必要があります。
git revert 1fc6665
リベース後も含めて、作業ツリーをリセットする必要がある場合があります。 次のコマンドを使用して、特定のコミットにリセットし、すべての変更を削除できます。
git reset --hard 1fc6665
最後の既知の競合しないコミットをオリジンリポジトリに強制的にプッシュするには、--force
を使用する必要があります。
警告:メイン(master
)ブランチへの強制プッシュは、本当に重要な理由がない限り、しばしば眉をひそめます。 独自のリポジトリで作業する場合は慎重に使用し、共同作業する場合はこれを回避するようにしてください。
git push --force origin main
クリーンなブランチのためにGitディレクトリからローカルの追跡されていないファイルとサブディレクトリを削除するには、git clean
を使用できます。
git clean -f -d
現在のアップストリームメインブランチのように見えるようにローカルリポジトリを変更する必要がある場合(つまり、競合が多すぎる場合)、ハードリセットを実行できます。
注:このコマンドを実行すると、ローカルリポジトリがアップストリームとまったく同じように表示されます。 行ったがアップストリームにプルされなかったコミットはすべて破棄されます。
git reset --hard upstream/main
結論
このガイドでは、リポジトリを管理したり、ソフトウェアで共同作業したりするときに使用する可能性のある、より一般的なGitコマンドのいくつかについて説明します。
オープンソースソフトウェアとコラボレーションの詳細については、オープンソース入門チュートリアルシリーズをご覧ください。
Gitでの作業の一部として役立つと思われるコマンドやバリエーションは他にもたくさんあります。 使用可能なすべてのオプションの詳細については、以下を実行して有用な情報を受け取ることができます。
git --help
公式GitWebサイトから、Gitの詳細を読んだり、Gitのドキュメントを確認したりすることもできます。