Gitコマンドについて調べる【git branch】
git branch
ブランチ名を一覧で閲覧できたり、新たにブランチを作ったりブランチを削除したりできるコマンドです。
ブランチの一覧を見る
$ git branch
git branch
コマンドでブランチの一覧を見ることができます。 見ることができるのはローカルリポジトリに存在するブランチの一覧です。下のように表示され、現在編集中のブランチの左には「*」がマークされます。
$ git branch master * example_branch
リモートブランチも見たい場合は-a
または--all
オプションをつければリモートブランチも見ることができます。
$ git branch -a $ git branch --all
ただ、コマンド実行時にリモートリポジトリを検索して一覧を表示するわけではないので、最新のリモートリポジトリを取得したいのであればgit branch -a
の前にgit fetch
コマンドでリモートリポジトリの状態を取得します。
$ git fetch
新たにブランチを作る
$ git branch [ブランチの名前]
ローカルリポジトリに対して新しいブランチを作成します。ただ編集するブランチを新しく作成したブランチに自動的に切り替えてくれるわけはないので、編集するブランチを新しく作成したブランチに切り替えるにはgit checkout
コマンドを使用します。
$ git branch [作成するブランチ名] $ git checkout [新しく作成したブランチ名]
新しくブランチを作成して新しいブランチに切り替える操作は、git checkout -b
というcheckoutのオプションがあるのでそれを使用すると1つのコマンドで実現できます。
# 新しくブランチを作成して、作成したブランチに切り替える $ git checkout -b [新しいブランチ名]
ブランチを消去する
$ git branch -d [消去するブランチ名] $ git branch --delete [消去するブランチ名]
-d
、--delete
オプションを付けて消去したいブランチ名を指定するとブランチを消去することができます。現在の編集中のブランチは消去することができずerror: Cannot delete the branch '[ブランチ名]' which you are currently on.
というエラーメッセージが表示されます。
また、masterブランチにマージされていないブランチは消去することができません。下のようなメッセージが出ます。
$ git branch -d example_branch error: The branch 'example_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D example_branch'.
masterブランチにマージしていないブランチを消去するということは、そのブランチに対して行なった変更履歴をすべて失ってしまうということです。ですので消去することができないようになっています。それでも強制的にブランチを消去するには-D
オプションを使います。
$ git branch -D [消去するブランチ名]
オプション
-m
、--move
ブランチ名を変更することができます。
$ git branch -m [変更前ブランチ名] [変更後ブランチ名] $ git branch --move [変更前ブランチ名] [変更後ブランチ名]
ただ、注意が必要なのが、リモートリポジトリから取得したブランチをリネームすると、リネーム前のブランチが消え、新しくブランチを作成した状態と同じになるので、そのままpushすると新しい名前のブランチが新しくリモートリポジトリに作成されます。リネーム前のブランチはリモートリポジトリにはそのまま残る点だけ注意してください。
-v
、--verbose
、-vv
ブランチの一覧を表示すると同時に、それぞれのブランチの現在の状態を表示します。
$ git branch -v
master e0b3ff6 modify readme
* example_branch1 b65374f new branch
example_branch2 e0b3ff6 modify readme
-v
、--verbose
は、ブランチの一覧に加えてそれぞれの最新のコミットの状態を見ることができます。ブランチ名の後にコミット番号、コミットログが表示されます。
上の例でmasterとexample_branch2の状態が同じなのは、example_branch2はmasterから新しくブランチを作成し、何も変更履歴がないため、同じコミットの状態になっているということです。
-vv
をつけると以下の様な表示になります。
$ git branch -vv master e0b3ff6 [origin/master] modify readme * example_branch1 b65374f [origin/example_branch1] new branch example_branch2 e0b3ff6 modify readme
先ほどの一覧に[]
で囲まれたリモートブランチ名が表示されます。それぞれのブランチがどのリモートブランチを追跡しているかを知ることができます。example_branch2にだけ表示がないのは、新しくローカルでブランチを切った後であるためまだ追跡ブランチがないということです。
Gitコマンドについて調べる【git push】
git push
git push
は、ローカルリポジトリにcommitした履歴をリモートリポジトリにアップロードするものです。ここでやっと自分のコードの修正がローカルからリモートにいくので、他の開発者から自分の変更が見えるようになります。
$ git push [リモートリポジトリ] [ローカルのブランチ名]:[リモートのブランチ名]
例)
$ git push ssh://git@github.com/kimromi/example.git master:master
上のコマンドは、ssh://git@github.com/kimromi/example.gitに接続し、ローカルのmasterブランチをリモートのmasterブランチにpushするというものです。ただ通常はgit cloneした時に「origin」という名前でリモートリポジトリが設定されているので、「origin」を指定できます。リモートリポジトリ名を確認するにはgit remote -v
で確認することができます。
# リモートリポジトリにoriginを指定 $ git push origin master:master # リモートリポジトリに何が設定されているか確認 $ git remote -v
また、ローカルのブランチ名とリモートのブランチ名が同じときは省略して指定することができます。この形をよく使うと思います。
# master:master と同じ名前なのでmasterと省略できる
$ git push origin master
origin
やmaster
も省略できる
$ git push
でプッシュすることもできます。ただ挙動についてはpush.default
の設定によって変わるので注意が必要です。push.default
の設定については以下のエントリがわかりやすかったです。
私はsimpleに設定しています。
$ git config --global push.default simple
オプション
-f
、--force
リモートリポジトリの状態を強制的に現在のローカルリポジトリの状態に合わせます。
$ git push -f origin master
もしもローカルが古い状態であった場合や、チームで開発している場合などは使用を避けたほうが良いです。コミットが消えてしまったり他の開発者の履歴も消してしまう場合があります。
-u
、--set-upstream
-u
をつけてpushすると、push先のブランチをTracking Branch(Upstream Branch)として登録するよう設定されます。Tracking Branchは日本語では追跡ブランチと言われ、現在のローカルブランチがどのリモートプランチを追跡しているか(ちょっと違うけど)の設定を持っています。これを設定されているとデフォルトでpushやpullの対象になります。
$ git push -u origin master
追跡ブランチの説明は以下のエントリーがわかりやすかったです。
Gitコマンドについて調べる【git commit】
git commit
git addにてステージング領域に追加されたファイルをローカルリポジトリにコミットするコマンドです。
$ git commit
git commit
コマンドを実行すると、テキストエディタが表示されます。表示されたテキストエディタにはコミットメッセージを入力します。
- 1行目 : コミットの全体的な説明
- 2行目 : 空白行
- 3行目以降 : コミットの詳細な説明
コミットメッセージの入力は必須なので、何も入力しないまま終了するとcommitはされません。2行目、3行目以降の入力は任意であるため、1行目の全体的な説明のみの入力でもOKです。
オプション
-m
、--message
テキストエディタを起動せず、コマンドで1行のコミットメッセージを入力してcommitすることができます。これはよく使用すると思います。
$ git commit -m '[コミットメッセージ]' $ git commit --message '[コミットメッセージ]'
-a
、--all
-a
をつけると、git add
せずステージング領域に追加していないファイルをaddして、commitします。要するにaddしなくても-a
をつけてcommitすれば自動でaddしてくれるものです。ただ、新規追加されgitの管理内になっていないものはaddされません。(git add -u
と同じ)
$ git commit -a
-m
と組み合わせるとgit add -u
とgit commit
が1行のコマンドできて便利です。
# 変更したファイルをaddしてcommitする $ git commit -a -m '[コミットメッセージ]'
--allow-empty
ファイルを何も変更せずaddしていない状態でもcommitのみ実行することができます。
$ git commit --allow-empty
何が便利かというと、これから何か機能を追加したり修正したりする際に仕様が曖昧なときなどに、とりあえず先にPullRequestを作ってそこで仕様について議論したりしながら開発を進めるということができます。
--amend
amendは「修正する、改める」という意味です。--amend
をつけてcommitすると直前のコミットをやり直すことができます。
# 直前のコミットにREADMEの修正も含めたかったが忘れてしまっていた $ vi README.md # README.mdを修正 $ git add README.md # README.mdをadd $ git commit --amend # --amendをつけてcommitすることで直前のコミットに含めることができる