Q1上書き保存とコミットの違いとして正しいものはどれですか。
Git とは — 変更を記録し、元に戻せる仕組み
この記事は、プログラミングやバイブコーディングをする上で最低限身につけたほうがよい IT の実践的な知識を 1 から身につける「IT 基礎知識講座の一部」です。
上書き保存では前の状態が残りません。コミットで記録を残し、リポジトリに積み上がった記録から前の時点を取り出すまでの流れを、図解で確かめます。
この記事は、Git を扱います。
Git はファイルの変更を記録して前の状態に戻せる仕組みで、その記録をサーバーに置くと、別の人とも同じ状態にそろえられます。
3 か所に並ぶのは同じ記録で、サーバーを間に置いてそろえます。
Git は何をする仕組みか — 記録を残し、リモートで共有する
ファイルの変更を時点ごとに記録し、過去の状態を取り出せるようにする仕組みがバージョン管理(version control)です。
記録を保存する場所がリポジトリ(repository)、それをサーバー側に置いたものがリモートリポジトリ(remote repository)、1 回分の記録がコミット(commit)です。
リモートリポジトリを置くサービスの代表例が GitHub と GitLab で、GitHub は Git そのものではなく、リモートリポジトリを置く場所です。
- app.js と style.css
- 上書き保存で中身が置き換わる
- コミットが古い順に並ぶ
- git commit で 1 つ増える
- git push で送ったコミットが並ぶ
- https://github.com/example/my-app.git がその場所
- 別のパソコンからも読み書きできる
自分のパソコンの記録をサーバーに送るのがプッシュ(push)、サーバーの記録を取り込むのがプル(pull)です。
サーバーを間に置くので、同僚がいつ取り込んでも同じ中身になります。
手順書に出てくる Git の文言は、3 つに分かれます。
左の列は自分のパソコンの中だけ、中央と右は GitHub とやり取りします。
上書き保存では前の状態が残らない — バージョン管理が記録するもの
上書き保存は、app.js の中身を今の中身で置き換える操作です。
置き換えたあとに前の中身は残らないので、保存を繰り返しても前の状態には戻せません。
| 直す前にしたこと | 前の中身がある場所 | 動かなくなった後 |
|---|---|---|
| 上書き保存だけ | どこにも残らない | 戻せない |
| エディタを開いたまま | 取り消しの履歴(閉じると消える) | 開いている間の編集は戻せる |
| git commit を打ってある | リポジトリの記録 | いつでも戻せる |
コミットしてあるときだけ、前の中身がリポジトリに残ります。
分かれ目は、直す前に git commit を 1 回打ってあるかどうかだけです。
この 1 回で、戻れる時点ができます。
記録を残すのはコミットだけ
上書き保存は今の中身で古い中身を消す操作で、消えた中身はパソコンのどこにも残りません。
コミットは中身を消さずにその時点の app.js を記録として 1 つ足すので、動かなくなったときに戻れるのは、コミットしてある時点だけです。
コミットは、記録する変更を選んでから残す 2 段階
コミットは、先に選び、そのあとで記録する 2 段階に分かれています。
選んで登録する段階がステージング(staging。コミットに含める変更を選んで登録する段階)で、この 2 段階のせいで my-app フォルダの中には置き場所が 3 つできます。
- app.js — 今エディタで開いている中身
- style.css — 画面の見た目を書いたファイル
- 上書き保存すると、ここの中身が置き換わる
- git add で選んだ変更が入る
- git commit を打つと空に戻る
- コミットが古い順に並ぶ
- git commit で 1 つ増える
変更は上から下へ、git add と git commit の 2 回で移ります。
選ばなかった index.html の変更は消えず、次の回に選び直せます。
確かめてから記録する手順は、この 3 行で出てきます。
# 直したファイルを確かめる
git status
# 記録する変更を選んで登録する
git add app.js
# 選んだ変更に、短いメッセージを付けて記録する
git commit -m "ログイン画面を追加"
git status を打つと直したファイルの名前が並び、git log で記録の一覧が出ます。
git add を打たないまま git commit を打つと、選ばれた変更が 1 つも無いので、記録は作られません。
記録する前に、記録するものを選ぶ
コミットは、選ぶ・残すの 2 段階です。
git add でこの回の記録に入れる変更を選び、git commit で選んだ分だけを 1 つの記録にするので、選ぶほうを打ち忘れると記録は 1 つも増えません。
リポジトリはフォルダの中にあり、コミットが古い順に並ぶ
リポジトリが入っている専用のフォルダは、そのフォルダで記録を始める git init を打った時点で作られます。
コミットするたびに、その中の記録が 1 つずつ増えます。
- 画面を作った時点の app.js
- 日時と「画面を作成」というメッセージ
- 入力欄を足した時点の app.js と style.css
- 日時と「入力欄を追加」というメッセージ
- いちばん新しく記録した app.js
- 日時と「ログイン画面を追加」というメッセージ
戻す操作は、並んでいる記録から 1 つ選び、その中身で作業中の app.js を置き換えることです。
記録したくないファイルは、フォルダの中の .gitignore という設定ファイルに名前を書いておけます。
まだ記録していないファイルはこれで記録されなくなり、一度記録したファイルには効きません。
記録は消えずに、古い順に並ぶ
リポジトリは、my-app フォルダの中にある専用のフォルダの中です。
コミットするたびに記録が 1 つずつ増え、前の記録が書き換わることはないので、戻すというのは並んでいる記録から 1 つ選んで、今のファイルをその中身にすることです。
理解度チェック
まずは1問ずつ答えてみましょう。
Q2コミットは 2 段階に分かれています。記録として残す前に行う段階はどれですか。
Q3自分のパソコンのリポジトリに残したコミットを、サーバーに置いたリモートリポジトリに送る操作はどれですか。