コンテンツにスキップ

magitでgitを操作する(初級)

現在、システムやソフトウェア開発でgitは必須。

僕はこれまで、gitの操作はコマンドラインでやってきましたけど、統合開発環境(IDE)としてEmacsを使い始めたので、magitパッケージを使うことにした。

ここでは、初級編として簡単なgit操作のmagit版を説明します!

今回magitで操作する内容

git操作は幅広いので、初級編として覚えるものを絞る。最低限、「チームの中で開発者できるべき」操作で下記で強調しているとこだけ。

  • masterブランチから機能用ブランチを作る(github, gitlabなどの管理ツールで実施)
  • 上記の機能ブランチを含めたローカルリポジトリを最新化する fetch
  • 機能ブランチをチェックアウトする checkout
  • 修正して、差分を確認する diff
  • コミット対象としてステージングする add
  • ステージングした内容をコミットする commit
  • コミット内容をpushする push
  • プルリクエスト(マジリクエスト)を出す(github, gitlabなどの管理ツールで実施)
  • 機能ブランチをmasterブランチにマージする(github, gitlabなどの管理ツールで実施)
  • ローカルリポジトリを最新化する fetch
  • ローカルブランチを最新化する merge

説明の前に、magitで困ったら

困ったら「?」でミニバッファにヘルプが表示される。また、キーの組み合わせのコマンドが多いけど、1つ目を押せば次に使えるキーもミニバッファにでる。

magit_help

margitで実行したgitコマンドは「Messages」バッファに記録 されているので、よくわからないキーをおしてしまったときにも、焦らずMessagesバッファを確認しよう。

最初の状態を確認する

まず作業ブランチで、gitコマンドでブランチの状態を確認してみる。

[~/workspace/site-builder] $ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

ローカルリポジトリはorigin/masterを参照したmasterブランチをチェックアウトした状態。

magitで状態確認します。「M-x magit-status」です。僕は「C-[ g」に割り当てた。以後、magitのコマンドはこのmagit-status上で入力するものです。

「M-x magit-status」のあとに、[y]で参照しているブランチの一覧を表示できる。

magit-status

masterブランチしかない、この状態からスタート!!

masterブランチから機能用ブランチを作る

私は最近GitHubを使い始めたので、GitHub上でmasterブランチから「f/magit-basic-sample」というブランチを作った。

これはリモート側のリポジトリなので、次はリモートの状態をローカルリポジトリに反映する。

機能ブランチを含めたローカルリポジトリを最新化する

先ほどリモートリポジトリで作成した「f/magit-basic-sample」を含めた状態をローカルリポジトリに反映する。

gitコマンドであれば「git fetch」。margitのコマンドは[f u]。

ミニバッファに実行中にメッセージは出るけど、リモート追跡ブランチが増えただけなのでmagit-statusに表示されている内容では変化はない。ローカルリポジトリのブランチは、[y]でブランチの一覧を表示できる。

magit-branch

Remoteに「f/magit-basic-sample」が増えた。

機能ブランチをチェックアウトする

先ほどリモートリポジトリで作成した「f/magit-basic-sample」をfetchできたので、そのブランチをチェックアウトしてみる。

margitのコマンドは[b c]。

入力するとミニバッファで「starting at:」と聞かれ、ブランチ一覧のペインが新しく表示されるので、そこから「origin/f/magit-basic-sample」選んでRETする。次に作成するブランチ名を聞かれるが、リモート追跡ブランチの名前から自動で「f/magit-basic-sample」が入力されているので、そのままRET。

gitコマンドだと「git checkout f/magit-basic-sample」と同じ。checkoutしたので、magit-statusのHEADは「f/magit-basic-sample」になった。

magit-status

修正して、差分を確認する

例として適当にREADME.mdを修正。最後の行を追加しただけ。

# site-builder
[crz33.com](https://crz33.com/)のサイトを作るためのツール。

f/magit-basic-sampleで書いたメモ。後から消す。

修正後、magit-statusを見ると、「Unstaged」にリストアップされるようになる。

magit-status

ファイルの行でTABキーで差分を見れる

コミット対象としてステージングする

先ほど「Unstaged」となったREADME.mdにカーソルを当てて、[s]でステージング。

すると、「Staged」に状態が変わる。

magit-status

ステージングした内容をコミットする

先ほどステージングした内容をコミットする。

コミットするには[c c]。コミットコメントを入力するエディタが開くので、コメントを入力して[C-c C-c]で本当にコミット。

コミットすると、リモート追跡ブランチにまだマージ(push)されていないコミット履歴が「Unmerged」にリストアップされる。

magit-status

コミット内容をpushする

先ほどコミットした内容をpushします。pushするには[P u]。

プルリクエストとmasterへのマージ

先ほどリモートリポジトリにpushできたので、GitHub上でプルリクエストしてマージする。

これでリモートリポジトリのmasterブランチのコミットが進み、「f/magit-basic-sample」の作業は終わり。

最後に、ローカルのmasterブランチを最新化してみる。

ローカルリポジトリを最新化する

リモートリポジトリが進んだので、ローカルリポジトリを最新化する。最初に実施した[f u]。

これで、リモートリポジトリでmasterへマージされた内容がローカルリポジトリに反映される。

ローカルブランチを最新化する

ローカルリポジトリを最新化したので、masterブランチをチェックアウトして最新化します。

既存ブランチのチェックアウトは[b b]。

コマンドを打つとブランチ一覧のペインが表示されるのでmasterブランチを選ぶ。スクショとらなかったけど、Headがmasterになったはず。

[y]で参照しているブランチ一覧を表示しても確認できる。

masterブランチをチェックアウトすると「Unpulled」にリモート追跡ブランチからpullできていないと表示されている。

magit-status

最新化するには[m m]で「origin/master」をマージするればよい。

これでローカルのmasterもリモートと同じ状態になった。

まとめ

チームの中で開発者できるべき操作に絞ってmagitの使い方を説明しました。

以上。


最終更新日: 2020年4月24日