Git の流れを体験しよう

GitLab のふつうの開発フローを、ボタンを押しながら目で見て学びます。

まず、Git と GitLab って何?(はじめに)

Git は、ファイルの変更を「記録」して、あとから戻したり、みんなの作業を合体させたりできる仕組みです。GitLab は、その記録を置いておくネット上の場所です。

ふつうの流れは4つ。(1) 自分専用の「ブランチ」で作業する、(2) GitLab に送る、(3)「マージリクエスト」で確認してもらう、(4) OKなら本流の main に合流する。下のボタンを順番に押して、絵がどう変わるか見てみましょう。

3つの場所があります。リモート(GitLab)=みんなで共有する本体ローカル=自分のPCの中の履歴作業フォルダ=実際にファイルを編集する所

0 / 10

はじめに

リモート (GitLab)

みんなで共有する本体。サーバー上にあります。

丸を押すとコミットの内容が見えます。

自分のPC:ローカルリポジトリ

自分のPCの中にある履歴。ここでコミットします。

まだありません。
git clone するとここにコピーができます。

丸の点線の輪は「まだ GitLab に送っていないコミット」です。

作業フォルダ / ステージ

ファイルを編集する場所。ステージに載せたものが次のコミットになります。

まだありません。git clone すると作業フォルダができます。

用語集(わからない言葉はここ)
リポジトリ
ファイルと、その変更の履歴をまとめて入れておく入れ物。GitLab 上にあるものが「リモート」、自分のPCにあるものが「ローカル」。
クローン (clone)
GitLab 上のリポジトリを、履歴ごと自分のPCにコピーすること。
ブランチ
履歴の「枝」。main を壊さずに、自分専用の場所で作業するために作ります。
コミット
変更をひとまとめにして履歴に残すこと。図の丸ひとつ。英数字7文字は、コミットの名札(ハッシュ)です。
ステージ (add)
「この変更を次のコミットに入れます」と選んで置いておく場所。
push / pull / fetch
push は手元のコミットを GitLab へ送る、pull は GitLab の最新を手元に取り込む、fetch は取り込まずに「見に行くだけ」。
マージリクエスト (MR)
「このブランチを main に入れてもいい?」というチームへの依頼ページ。確認とコメントの場でもあります。
CI / パイプライン
push のたびに自動でビルドやテストを走らせ、壊れていないか確認する仕組み。
マージ
ブランチの変更を main に合流させること。「マージコミット」は合流の印、「スカッシュ」は複数のコミットを1つにまとめて入れる方法です。
rebase
自分のコミットを、最新の main の先頭に付け替えること。履歴が一直線になります。

よくあるつまずき

最初はみんな通る道です。あわてず、まず git status で状況を見ましょう。

1. 衝突(コンフリクト)が出た

同じ場所をほかの人も変えていると、Git はどちらが正しいか決められず、ファイルに目印を書き込んで止まります。

<<<<<<< HEAD
ボタン名:ログイン
=======
ボタン名:サインイン
>>>>>>> feature/login-button

やること:ファイルを開いて、残したい内容に書き直し、目印の行(<<<、===、>>>)を消します。そのあと次を実行します。

git add login.html
git rebase --continue    # merge の場合は git commit

2. ブランチを切り替え忘れた

main の上で作業してしまった! でも大丈夫。まだ push していなければ直せます。

まだコミット前なら、そのまま新しいブランチを作れば変更はついてきます。

git switch -c feature/login-button

main にコミットしてしまった後(push 前)は、枝を作ってから main を GitLab の状態に戻します。

git branch feature/login-button
git reset --hard origin/main   # main を戻す(push前のみ)
git switch feature/login-button

3. push が rejected(拒否)された

! [rejected] ... (fetch first) と出たら、GitLab 側に、手元にないコミットがあるということ。ほかの人が先に push した合図です。

やること:先に取り込んでから、もう一度 push します。

git pull --rebase
git push

無理やり上書きする --force は、みんなの作業を消すことがあるので、慣れるまで使わないのが安全です。