Gitの使用方法:リファレンスガイド

Gitチートシート

前書き

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

この虎の巻スタイルのガイドは、Gitリポジトリでの作業や共同作業に役立つコマンドのクイックリファレンスを提供します。 Gitをインストールして構成するには、「https://www.digitalocean.com/community/tutorials/how-to-contribute-to-open-source-getting-started-with-git[How to Contribute to Openソース:Git入門]。

このガイドの使用方法:

  • このガイドは、自己完結型のコマンドラインスニペットを含むチートシート形式です。

  • 完了しようとしているタスクに関連するセクションにジャンプします。

  • このガイドのコマンドにhighlighted textが表示されている場合、このテキストはyour ownリポジトリ内のコミットとファイルを参照している必要があることに注意してください。

セットアップと初期化

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

git --version

現在の作業ディレクトリを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 .

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 documentationを読むことで、ブランチについて詳しく知ることができます。

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

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

git branch -D branch-name

コラボレーションとアップデート

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

git fetch upstream

フェッチしたコミットをマージします。

git merge upstream/master

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

git push origin master

追跡リモートブランチからコミットを取得してマージします。

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 documentationを通してそれについてもっと完全に読むことができます。

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

git diff --staged

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

git diff a-branch..b-branch

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

git diff 61ce3e6..e221d9c

スタッシング

いくつかのコードに変更を加えたことがわかる場合がありますが、終了する前に別の作業を開始する必要があります。 これまでに行った変更をコミットする準備はできていませんが、作業を失いたくありません。 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 template repoを確認してください。

リベース

リベースを使用すると、ブランチのベースとなるコミットを変更することでブランチを移動できます。 リベースを使用すると、コミットをスカッシュまたはリワードできます。

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

git rebase -i HEAD~5

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

git rebase -i 074a4e5

コミットを潰したり、言い直したりしたら、プロジェクトのアップストリームコードの最新バージョンの上にブランチのリベースを完了することができます。

git rebase upstream/master

リベースと更新の詳細については、How To Rebase and Update a Pull Requestを参照してください。これは、あらゆるタイプのコミットにも適用できます。

リセット中

場合によっては、リベース後を含めて、作業ツリーをリセットする必要があります。 次のコマンドを使用して、特定のコミットとdelete all changesにリセットできます。

git reset --hard 1fc6665

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

[.warning]#Warning:マスターへの強制プッシュは、それを行う本当に重要な理由がない限り、しばしば嫌われます。 独自のリポジトリで作業する場合は慎重に使用し、共同作業する場合はこれを回避するようにしてください。

git push --force origin master

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

git clean -f -d

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

[.note]#Note:このコマンドを実行すると、ローカルリポジトリがアップストリームとまったく同じように見えます。 行ったがアップストリームwill be destroyed
にプルされなかったコミット#

git reset --hard upstream/master

結論

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

オープンソースソフトウェアとコラボレーションの詳細については、Introduction to Open Source tutorial seriesをご覧ください。

Gitを使用した作業の一部として役立つコマンドやバリエーションは他にもたくさんあります。 使用可能なすべてのオプションの詳細については、次を実行できます。

git --help

有用な情報を受け取るため。 また、Gitの詳細を読んだり、official Git websiteからGitのドキュメントを確認したりすることもできます。