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のドキュメントを確認したりすることもできます。