Gitチートシート

序章

開発者とオープンソースソフトウェアメンテナのチームは通常、コラボレーションをサポートする分散バージョン管理システムであるGitを介してプロジェクトを管理します。

このチートシートスタイルガイドは、Gitリポジトリでの作業と共同作業に役立つコマンドのクイックリファレンスを提供します。 Gitをインストールして構成するには、「オープンソースに貢献する方法:Git入門」を必ずお読みください。

このガイドの使用方法:

  • このガイドは、自己完結型のコマンドラインスニペットを含むチートシート形式です。
  • 完了しようとしているタスクに関連するセクションにジャンプします。
  • このガイドのコマンドにhighlighted textが表示されている場合、このテキストは独自のリポジトリ内のコミットとファイルを参照している必要があることに注意してください。

セットアップと初期化

次のコマンドを使用してGitのバージョンを確認します。これにより、Gitがインストールされていることも確認されます。

  1. git --version

Gitを使用すると、ローカルマシン上のすべてのリポジトリに適用されるいくつかの設定を構成できます。 たとえば、Gitがローカルリポジトリに加えた変更をクレジットするために使用するユーザー名を構成します。

  1. git config --global user.name “firstname lastname

各履歴マーカーに関連付ける電子メールアドレスを構成します。

  1. git config --global user.email “valid-email

好みのテキストエディタも設定します。

  1. git config --global core.editor “nano

initを使用して、現在の作業ディレクトリをGitリポジトリとして初期化できます。

  1. git init

リモートでホストされている既存のGitリポジトリをコピーするには、リポジトリのURLまたはサーバーの場所でgit cloneを使用します(後者の場合はsshを使用します)。

  1. git clone https://www.github.com/username/repo-name

現在のGitディレクトリのリモートリポジトリを表示します。

  1. git remote

より詳細な出力を得るには、-vフラグを使用します。

  1. git remote -v

Gitアップストリームを追加します。これはURLにすることも、サーバーでホストすることもできます(後者の場合、sshに接続します)。

  1. git remote add upstream https://www.github.com/username/repo-name

演出

ファイルを変更し、次のコミットに進むようにマークを付けると、そのファイルはステージングされたファイルと見なされます。

追加された、ステージングされていないファイルやステージングされているファイルなど、Gitリポジトリのステータスを確認します。

  1. git status

変更されたファイルをステージングするには、addコマンドを使用します。このコマンドは、コミット前に複数回実行できます。 次のコミットに含める後続の変更を行う場合は、addを再度実行する必要があります。

addで特定のファイルを指定できます。

  1. git add my_script.py

.を使用すると、.で始まるファイルを含め、現在のディレクトリ内のすべてのファイルを追加できます。

  1. git add .

現在のディレクトリ内のすべてのファイルとサブディレクトリ内のファイルを追加する場合は、-allまたは-Aフラグを使用できます。

  1. git add -A

resetを使用すると、作業ディレクトリ内の変更を保持しながら、ステージングからファイルを削除できます。

  1. git reset my_script.py

コミット

更新をステージングすると、それらをコミットする準備が整います。これにより、リポジトリに加えた変更が記録されます。

ステージングされたファイルをコミットするには、意味のあるコミットメッセージを指定してcommitコマンドを実行し、コミットを追跡できるようにします。

  1. git commit -m "Commit message"

追跡されたすべてのファイルを1つのステップでコミットすることにより、それらのステージングを凝縮できます。

  1. git commit -am "Commit message"

コミットメッセージを変更する必要がある場合は、--amendフラグを使用して変更できます。

  1. git commit --amend -m "New commit message"

ブランチ

Gitのブランチは、リポジトリ内のコミットの1つへの移動可能なポインターであり、作業を分離し、機能の開発と統合を管理できます。 Gitのドキュメントを読むと、ブランチの詳細を知ることができます。

branchコマンドを使用して、現在のすべてのブランチを一覧表示します。 現在アクティブなブランチの横にアスタリスク(*)が表示されます。

  1. git branch

新しいブランチを作成します。 新しいブランチに切り替えるまで、現在アクティブなブランチに留まります。

  1. git branch new-branch

既存のブランチに切り替えて、現在の作業ディレクトリにチェックアウトします。

  1. git checkout another-branch

-bフラグを使用して、新しいブランチの作成とチェックアウトを統合できます。

  1. git checkout -b new-branch

ブランチ名の名前を変更します。

  1. git branch -m current-branch-name new-branch-name

指定したブランチの履歴を、現在作業しているブランチにマージします。

  1. git merge branch-name

競合がある場合は、マージを中止します。

  1. git merge --abort

特定のコミットを選択して、特定のコミットを参照する文字列を使用してcherry-pickとマージすることもできます。

  1. git cherry-pick f7649d0

ブランチをマージし、ブランチが不要になったら、次のように削除できます。

  1. git branch -d branch-name

ブランチをmainにマージしていないが、それを削除したい場合は、ブランチをforce削除できます。

  1. git branch -D branch-name

コラボレーションと更新

リモートアップストリームなどの別のリポジトリから変更をダウンロードするには、fetchを使用します。

  1. git fetch upstream

フェッチされたコミットをマージします。 一部のリポジトリでは、mainの代わりにmasterを使用する場合があることに注意してください。

  1. git merge upstream/main

ローカルブランチコミットをリモートリポジトリブランチにプッシュまたは送信します。

  1. git push origin main

トラッキングリモートブランチからコミットをフェッチしてマージします。

  1. git pull

検査

現在アクティブなブランチのコミット履歴を表示します。

  1. git log

特定のファイルを変更したコミットを表示します。 これは、ファイルの名前変更に関係なく、ファイルに従います。

  1. git log --follow my_script.py

一方のブランチにあり、もう一方のブランチにはないコミットを表示します。 これにより、b-branchにないa-branchのコミットが表示されます。

  1. git log a-branch..b-branch

参照ログ(reflog)を調べて、ブランチのヒントやその他の参照がリポジトリ内で最後に更新されたのはいつかを確認します。

  1. git reflog

コミット文字列またはハッシュを介して、Git内のオブジェクトをより人間が読める形式で表示します。

  1. git show de754f5

変更を表示

git diffコマンドは、コミット、ブランチなどの間の変更を表示します。 Gitのドキュメントで詳細を読むことができます。

ステージング領域にある変更されたファイルを比較します。

  1. git diff --staged

a-branchにはあるが、b-branchにはないものの差分を表示します。

  1. git diff a-branch..b-branch

2つの特定のコミット間の差分を表示します。

  1. git diff 61ce3e6..e221d9c

プロジェクトからファイルを削除してパスの変更を追跡し、この削除をコミット用にステージングします。

  1. git rm file

または、既存のファイルパスを変更してから、移動をステージングします。

  1. git mv existing-path new-path

コミットログをチェックして、パスが移動されていないかどうかを確認します。

  1. git log --stat -M

隠し場所

コードに変更を加えたことに気付く場合もありますが、終了する前に、別の作業を開始する必要があります。 これまでに行った変更をコミットする準備はまだ整っていませんが、作業を失いたくありません。 git stashコマンドを使用すると、ローカルの変更を保存して、最新のHEADコミットに沿った作業ディレクトリに戻すことができます。

あなたの現在の仕事を隠してください:

  1. git stash

あなたが現在隠しているものを見てください:

  1. git stash list

隠し場所には、[email protected]{0}[email protected]{1}などの名前が付けられます。

特定の隠し場所に関する情報を表示します。

  1. git stash show [email protected]{0}

スタッシュを保持したまま、現在のスタッシュにあるファイルをスタッシュから取り出すには、applyを使用します。

  1. git stash apply [email protected]{0}

ファイルを隠し場所から取り出したいが、隠し場所が不要になった場合は、popを使用します。

  1. git stash pop [email protected]{0}

特定のスタッシュに保存されたファイルが不要になった場合は、スタッシュをdropすることができます。

  1. git stash drop [email protected]{0}

複数のスタッシュを保存していて、それらを使用する必要がなくなった場合は、clearを使用してそれらを削除できます。

  1. git stash clear

ファイルを無視する

ファイルをローカルのGitディレクトリに保持したいが、プロジェクトにコミットしたくない場合は、これらのファイルを.gitignoreファイルに追加して、競合が発生しないようにすることができます。

nanoなどのテキストエディタを使用して、.gitignoreファイルにファイルを追加します。

  1. nano .gitignore

.gitignoreファイルの例を確認するには、GitHubの.gitignoreテンプレートリポジトリをご覧ください。

リベース

リベースを使用すると、ベースとなるコミットを変更することでブランチを移動できます。 リベースを使用すると、コミットを押しつぶしたり、言い換えたりできます。

リベースするコミットの数(以下の場合は5)を呼び出すことで、リベースを開始できます。

  1. git rebase -i HEAD~5

または、特定のコミット文字列またはハッシュに基づいてリベースすることもできます。

  1. git rebase -i 074a4e5

コミットを破棄または言い換えたら、プロジェクトのアップストリームコードの最新バージョンに加えてブランチのリベースを完了することができます。 一部のリポジトリでは、mainの代わりにmasterを使用する場合があることに注意してください。

  1. git rebase upstream/main

リベースと更新の詳細については、プルリクエストをリベースして更新する方法を参照してください。これは、あらゆるタイプのコミットにも適用できます。

元に戻すとリセット

revertを使用すると、特定のコミットで行った変更を元に戻すことができます。 これを実現するには、作業ツリーをクリーンにする必要があります。

  1. git revert 1fc6665

リベース後も含めて、作業ツリーをリセットする必要がある場合があります。 次のコマンドを使用して、特定のコミットにリセットし、すべての変更を削除できます。

  1. git reset --hard 1fc6665

最後の既知の競合しないコミットをオリジンリポジトリに強制的にプッシュするには、--forceを使用する必要があります。

警告:メイン(master)ブランチへの強制プッシュは、本当に重要な理由がない限り、しばしば眉をひそめます。 独自のリポジトリで作業する場合は慎重に使用し、共同作業する場合はこれを回避するようにしてください。

  1. git push --force origin main

クリーンなブランチのためにGitディレクトリからローカルの追跡されていないファイルとサブディレクトリを削除するには、git cleanを使用できます。

  1. git clean -f -d

現在のアップストリームメインブランチのように見えるようにローカルリポジトリを変更する必要がある場合(つまり、競合が多すぎる場合)、ハードリセットを実行できます。

:このコマンドを実行すると、ローカルリポジトリがアップストリームとまったく同じように表示されます。 行ったがアップストリームにプルされなかったコミットはすべて破棄されます

  1. git reset --hard upstream/main

結論

このガイドでは、リポジトリを管理したり、ソフトウェアで共同作業したりするときに使用する可能性のある、より一般的なGitコマンドのいくつかについて説明します。

オープンソースソフトウェアとコラボレーションの詳細については、オープンソース入門チュートリアルシリーズをご覧ください。

Gitでの作業の一部として役立つと思われるコマンドやバリエーションは他にもたくさんあります。 使用可能なすべてのオプションの詳細については、以下を実行して有用な情報を受け取ることができます。

  1. git --help

公式GitWebサイトから、Gitの詳細を読んだり、Gitのドキュメントを確認したりすることもできます。