12回もやる勉強会で必要になってきたGitの操作って?
こんな勉強会をやってます。全12回。
AWS上で構築するRESTfulアプリ勉強会~Web開発ワークショップ~ - connpass
第1回 開発環境の構築でAWS-EC2のインスタンスを作成して開発環境を作っておけば、第n回からでも参加できるようにしています。
- 各参加者が作成したソースは、自分のGitHubアカウントで管理してもらう。
- 主催側のソースはここで管理していて、勉強会の開催時にはここにその回の完成版ソースが載っている状態にしています。
で、勉強会開始時に、
「各参加者の環境に前回の内容がきちんと終了した状態のソースがある状態」
から始める必要があるのですが、そのための作業手順を書いたのがこの記事です。
- 前回の内容を途中までやった方
- 前回の内容を完了した方
- 今回から参加の方
によって手順が少し違います。
勉強会の内容は、事前にQiitaに投稿して、各参加者がマニュアルとして見られるようにしています。
そこに毎回この手順を書くのもなんなので、別記事にした次第です。各勉強会の投稿からここにリンクします。
勉強会の前にこういう状態にしておきたい!
やりたいことは、
- masterブランチを前回の内容を全て終えた状態にする
- 前回分の終了状態となったmasterブランチを元に、今回の作業用ブランチを作成し、チェックアウトする
以下の説明の前提
ここでは、
- 前回 = 第4回
- 今回 = 第5回
として話を進めます。第6, 7 回と進んだら適宜読み替えて下さい。
- 前回自分が作業したブランチは、
vol/04
- 前回分の答えとして主催者が用意したブランチは、
vol/04-finish
- 今回自分が作業するブランチは、
vol/05
- 今回分の答えとして主催者が用意したブランチは、
vol/05-finish
です。
手順1 - masterブランチを前回の内容を全て終えた状態にする
前回が作業途中の方はまずこれ
とにかくコミットしましょう!途中でもとにかく!
未コミットの変更が残ったままだとGitにいろいろ怒られますので。
git add .
git commit -m "途中だけどコミット"
こんな感じで。
次は全員同じ。 fork元をリモートリポジトリとして追加する
第1回勉強会でforkした元のリポジトリをリモートリポジトリとして追加します。
その前に確認。
git remote
とコマンドを打って、
origin
upstream
と表示される場合はこの作業は終わっています。次へ行きましょう!
upstream
が表示されない人は次のコマンド。
git remote add upstream https://github.com/suzukishouten-study/rest-study.git
これでOKです!
次も全員同じ。 upstreamリポジトリから最新を取得する
git fetch upstream
これでOK!今回分の完成ソースも含めた全てのソースが取得出来ました。
次は、
- 前回の内容を完了した方
- 前回の内容を途中までやった方と今回から参加の方
で少し違うのでご注意!
前回の内容を完了した方
masterブランチを前回の内容を全て終えた状態にします。
前回を完了した方は、vol/04
ブランチが綺麗に出来上がっているので、これをマージです。
git checkout master
でmasterブランチをチェックアウト後、
git merge vol/04
でマージ。これでOK!
前回の内容を途中までやった方と今回から参加の方
masterブランチを前回の内容を全て終えた状態にします。
前回の内容を途中までやった方はvol/04
が未完成、今回から参加の方は、そもそもブランチがありません。
upstreamリポジトリのvol/04-finish
ブランチが前回終了状態のソースなので、これをマージです。
git checkout master
でmasterブランチをチェックアウト後、
git reset --hard upstream/vol/04-finish
で強制的にマージ。というかリセット。これでOK!
手順2 - 前回分の終了状態となったmasterブランチを元に今回の作業用ブランチを作成し、チェックアウトする
masterブランチは手順1で全員同じになったので、この手順2は全員同じ作業です。
今回の作業用ブランチとして、vol/05
ブランチを作り、チェックアウトします。
master
ブランチから分岐してvol/05
ブランチを作成するので、まずmaster
ブランチにいることを確認して下さい。
これまでの作業で、既にmasterブランチにいるはずですが念の為。
git branch
でmasterにいることを確認
もしmasterにいなかった場合は、git checkout master
でmasterをチェックアウト
次に、以下コマンドでvol/05
ブランチを作成します。
git branch vol/05
でブランチを作って
git checkout vol/05
でそのブランチをチェックアウト
または、
git checkout -b vol/05
でブランチ作成とそのブランチのチェックアウトを一度に実行
これでOK!
確認
念のため確認します。
git log
でコミットログを確認してみましょう。
コミットログが出力されます。
前回の最後のコミットが表示されていればOKです。
これでブランチの準備は整いました。
勉強会を始めましょう!
おまけ
コマンドまとめ。上に書いてないコマンドも。勉強会の準備のためによく使ってるもの中心。
(自分用メモ)
勉強会で使っているもの
まとめるまでもない...詳しくはググりましょう。
-
git add .
- 全部ステージ
-
git commit -m "途中だけどコミット"
- メッセージを付けてコミット
-
git remote
- リモートリポジトリを表示
-
git remote add upstream https://github.com/suzukishouten-study/rest-study.git
- upstreamという名前で
https://github.com/suzukishouten-study/rest-study.git
をリモートリポジトリとして登録。
- upstreamという名前で
-
git fetch upstream
- リモートリポジトリをフェッチ。Clone元は自動でoriginと命名、fork元はupstreamという命名するのがセオリー。かな?
-
git checkout master
- masterブランチをチェックアウト。
-
git branch vol/05
-
vol/05
ブランチを作成
-
-
git checkout -b vol/05
-
vol/05
ブランチ作成とチェックアウトを一度に実行
-
-
git merge vol/04
- いまいるブランチにvol/04ブランチをマージ。
-
git reset --hard upstream/vol/04-finish
- 今いるブランチを無理やり
upstream/vol/04-finish
ブランチと同じ状態にする。 -
git reset
については下記リンクが非常に勉強になりました。ありがとうございます!
- 今いるブランチを無理やり
-
git log
- コミットログを確認。
-
git log --graph
とするとグラフ表示。
勉強会の準備で使うもの
ユースケース毎に。
- upstreamに直接push(upstreamにpush権限がある場合のみ可能)
-
git push upstream vol/05:vol/05-finish
- ローカルの
vol/05
をupstreamにvol/05-finish
という名前でpush
- ローカルの
-
- ブランチ名変更
-
git branch -m vol/05 vol/05-finish
- 現在vol/05ブランチにいるなら、
git branch -m vol/05-finish
でよい。
- 現在vol/05ブランチにいるなら、
-
- ブランチ削除
-
git branch -d test
- testブランチを削除
-
- 直前コミットを修正。ちょっとだけ修正漏れた、と言う時にコミットを分けたくない時。
-
git add .
でステージ -
git commit --amend
で直前コミットを修正
-
- 詳細なgit remote
-
git remote -v
- fetch元とpull先のリポジトリのURIが表示される
-
- 詳細なgit branch
-
git branch -a
- リモートも含め全部表示
-
git branch -av
- 上記に加え、各ブランチの最終コミットハッシュとメッセージも表示
-
git branch -avv
- 上記に加え、リモート追跡ブランチも表示
-
普段使ってるもの
-
git rebase master
- masterブランチの修正を取り込む。現ブランチとの分岐位置をすすめる。mergeするよりコミットログを汚さなくてよい。
-
git reset --hard HEAD
- 全部きれいに元に戻す。
-
git rebase -i HEAD~n
- コミットの修正。HEAD~nの
n
はいくつ前のコミットまで修正するか。いつもググって思い出す。- 修正後、やめる場合は
git rebase --abort
- 続ける場合は
git rebase --continue
- 修正後、やめる場合は
- コミットの修正。HEAD~nの
その他
イケてる使い方見つけたら追記します。
以上です。