Gitはコマンドプロンプトなどのコマンドラインで使用します。
私はVisual Studio Codeで作業しているのでaddやcommitなどは基本的にVSCodeがうまいことやってくれますが、だからこそコマンドラインを使う時に忘れてしまいがちなので、使う頻度の高いコマンドをメモするついでにそれぞれどんな作業をしているのかメモしておきます。
リポジトリを作成する
空のローカルリポジトリを作成します。
リポジトリをクローンする
既存の Git リポジトリのコピーをローカルリポジトリに作成します。
クローンしたリポジトリは自動的にリモートリポジトリに設定されます。
ワーキングツリーの状況を確認する
コミットするべきファイルがあるかどうか、ワーキングツリー(作業ディレクトリ)の状況を確認します。
前回のコミットから変更されたファイルがある場合、一覧が表示されます。
コミットする
ファイルの変更履歴を記録(コミット)するには段階を踏む必要があります。
ファイルをインデックスにステージングする
//ファイルやディレクトリをインデックスに登録する
$ git add [filename]
//変更された全てのワークツリーの内容をインデックスに追加する
$ git add -A
//以前コミットしたことがあるファイルだけインデックスに追加する
$ git add -u
ワーキングツリーにある変更されたファイルやディレクトリをコミットする前に、まずはインデックス(ステージングエリア)に追加します。
インデックスに追加することを『addする』や『ステージする』や『ステージング』と言います。
Gitは差分を記録できるシステムなので、ワーキングツリーの全てのファイルをステージングするのではなく、変更されたものだけステージングすると良いです。
インデックスをコミットする
//インデックスに追加されたファイルをコミットする
$ git commit
//コミットメッセージを予め指定した上でコミットする
$ git commit -m "[comment]"
インデックス(ステージングされたファイルたち)をコミットする時には、コミットの内容がわかりやすいように任意のメッセージを入力できます。
リモートリポジトリを操作する
//リモートリポジトリを追加する
$ git remote add [追加するリモートリポジトリ名] [追加したいリポジトリURL]
//リモートリポジトリ名を確認する
$ git remote
//リモートリポジトリ名とURLを確認する
$ git remote -v
//リモートリポジトリを削除する
$ git remote rm [削除したいリモートリポジトリ名]
//リモートリポジトリ名を変更する
$ git remote rename [変更前リモートリポジトリ名] [変更後リモートリポジトリ名]
//リモートリポジトリのURLを変更する
$ git remote set-url [変更したいリモートリポジトリ名] [変更先のURL]
既存のリポジトリをクローンするのではなく、ローカルリポジトリをある程度進めた時に他の端末でプロジェクトを共有するために後付でリモートリポジトリを設定することがよくあるので、覚えておいて損はないと思います。
作業を分岐する
//現在ブランチ一覧を確認する
$ git branch
//新たなブランチを作成する
$ git branch [新しいブランチ名]
//ブランチを削除する
$ git branch -d [削除するブランチ名]
//ブランチの名前を変える
git branch -m [変更するブランチ名] [新しいブランチ名]
//現在のブランチの名前を変える
git branch -m [新しいブランチ名]
//ブランチを切り替える
$ git checkout [移動先のブランチ名]
//現在のブランチの変更内容を他のブランチにも適用する
$ git merge [branch]
作業を分岐する時はブランチを利用します。
ブランチを切り替えるときはチェックアウトします。
現在のブランチでの変更内容を他のブランチにも適用させたい場合はマージします。
リモートリポジトリの状況をローカルリポジトリの状況に同期する
リモートリポジトリの状況とローカルリポジトリの状況を同期するには、フェッチ+マージを行うかプルを行います。
フェッチ+マージとプルは同じ作業です。
段階を踏んで行うか、一気に行うかの違いになります。
フェッチしてリモートリポジトリの状況を取得してから統合する
//リモートリポジトリの状況を取得する
$ git fetch
//リモート追跡ブランチのコミットを現在のブランチに統合する
$ git merge origin/master
fetch(フェッチ)をすると、リモートリポジトリの状況の取得だけを行うことができます。
取得したコミットは、[origin/master]などのリモート追跡ブランチに取得されます。
取得しただけではマージ(統合・上書き)はされません。
リモート追跡ブランチはあくまでリモートの状態を示したものなので、リモート追跡ブランチ上でファイルの内容を変更することはできません。
フェッチでリモート追跡ブランチの状況を確認し、ローカルリポジトリの状況と競合(コンフリクト)する場合はマージする際に競合を解決します。
競合しない場合はそのままマージまたはプルしてOKです。
※fetchで取得したリモートリポジトリの最新のコミットは[FETCH_HEAD
]で指定されます。これに対してローカルリポジトリの最新のコミットは[HEAD
]で指定されます。[FETCH_HEAD
]と[HEAD
]が競合する場合もあるので、プルを行う前にフェッチを行うと良いです。
リモートリポジトリの状況をローカルリポジトリに同期する
//リモートリポジトリの状況をローカルリポジトリに同期する
$ git pull [リモートリポジトリ上のブランチ名]
リモートリポジトリ上の状況をローカルリポジトリに同期します。
競合(コンフリクト)が発生する場合はリモートリポジトリとローカルリポジトリのどちらの変更を選択するか解決する作業が必要です。
そういった状況を回避するために、一度フェッチしてからプルするのが安全だと思います。
ローカルリポジトリの状況をリモートリポジトリの状況に同期する
//ローカルリポジトリの現在のブランチをリモートリポジトリ上の上位のブランチに同期する
$ git push
//ローカルリポジトリの状況をリモートリポジトリに同期する
$ git push [リモートリポジトリ名] [ローカルリポジトリのブランチ名]
//例)$ git push origin master
リポジトリやブランチを指定しなくても、git push
を使用すれば自動的に上位のブランチに同期できます。
リモートリポジトリがローカルリポジトリよりも進んでいるなど、変更が競合(コンフリクト)する場合は、自動的にプッシュがエラーで停止します。
その場合は一度フェッチを行って競合を解決してからプッシュしましょう。
続きを読む