クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

ブランチで作業してマージする(Git)

このレッスンのあとで: ブランチで作業して、メインにマージできる。

55分のレッスンコマンド14件Git と Gitea のラボ:自分専用の Git サーバーでクローン、コミット、プッシュを学ぶ

2人で1つの価格表

小さな店で、2人の店員が同じ午後に価格表を直しました。1人は値段を上げ、もう1人は同じ行の誤字を直しました。

1つのフォルダを共有していたら、どちらかの仕事が消えます。バージョン管理は両方の版を残し、どこでぶつかったかを正確に見せます。

このレッスンのゴール

メモ

ブランチで作業して、メインにマージできる。

大事な言葉

ことばいみ
リモートサーバーに置いた、リポジトリの共有コピー(remote)
クローン履歴ごとリポジトリをコピーすること(clone)
ブランチ自分のコミットを持つ、作業の別の流れ(branch)
マージあるブランチの仕事を、別のブランチに取り込むこと(merge)
コンフリクト2つのブランチが同じ行を変えて、ぶつかること(conflict)

学生が入力するセルは、このプレビューでは空白です。

クローンは履歴ぜんぶをコピーする

リモートは、Gitea のようなサーバーに置いた、リポジトリの共有コピーです。作業するにはクローンします。すべてのファイルと、過去のコミットがすべて手に入ります。

ラボの Gitea には hello-git というリポジトリがあります。最初の Run で review という練習用フォルダにクローンします。次の Run で、新しい順に履歴を読みます。

review にクローンする

コマンド
git clone http://gitea:3000/student/hello-git.git review

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

履歴を1行ずつ読む

コマンド
git -C review --no-pager log --format="%h|%an|%s"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ブランチは、仕事を別に保つ

ブランチは、自分のコミットを持つ流れです。ブランチでファイルを変えても、メインはそのままです。

コミットには、作った人が記録されます。先に、このフォルダ用の名前とアドレスを Git に教えます。そのあと late-opening というブランチを作り、1行を変えます。

このフォルダは練習用です。push はしません。

このフォルダ用の名前

コマンド
git -C review config user.name "Student"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

このフォルダ用のアドレス

コマンド
git -C review config user.email "[email protected]"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ブランチを作って移る

コマンド
git -C review switch -c late-opening

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ブランチで1行を変える

コマンド
sed -i 's/Ada Lovelace/Ada Lovelace (host)/' review/visitors.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ブランチでコミットする

コマンド
git -C review commit -am "Mark Ada as the host"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

マージは2つの流れを合わせる

2つのブランチが別々の行を変えたなら、Git は手助けなしでマージします。同じ行を変えたときは、Git は選べないので、止まってあなたに聞きます。これがコンフリクトです。

わざとコンフリクトを起こします。メインに戻って、同じ行を別の形で変え、コミットします。そのあと、もう1つのブランチをマージします。

メインに戻る

コマンド
git -C review switch main

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

同じ行を別の形で変える

コマンド
sed -i 's/Ada Lovelace/Ada L. Lovelace/' review/visitors.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

メインでコミットする

コマンド
git -C review commit -am "Use the full initials"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

もう1つのブランチをマージ

コマンド
git -C review merge late-opening

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

Git が書いた内容を読む

コマンド
cat review/visitors.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

3つの印の行が2つの版を分ける

Git は両方の版をファイルに書きました。<<<<<<< HEAD の行から、今いるブランチの版が始まります。======= の行で、その版が終わります。>>>>>>> late-opening の行で、もう1つの版が終わります。

解決するには、ほしい文章にファイルを直し、3つの印の行を消します。そのあと git add と git commit をします。

ここでは解決せず、マージを取り消します。

マージを取り消す

コマンド
git -C review merge --abort

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

2つのブランチをグラフで見る

コマンド
git -C review --no-pager log --oneline --graph --all

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

コンフリクトは、リポジトリが壊れたか、だれかが間違えたしるしだと思う人が多いです。違います。2人が同じ行を変えた、というだけです。何も失われていません。正しい文章を選ぶか、merge --abort でマージの前に戻ります。

もう一歩先へ

review でもう一度マージし、今度は解決しましょう。行を Ada L. Lovelace (host) にし、3つの印の行を消してから、ファイルを git add します。コミットは --no-edit をつけます。エディタを開かず、Git のメッセージをそのまま使えます。

もう一度グラフを出し、マージのコミットがほかとどう違うかを説明しましょう。push はしません。review は練習用のままです。

このラボとソースについて: Git と Gitea のラボ:自分専用の Git サーバーでクローン、コミット、プッシュを学ぶ

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。