Cursor を使うならバージョン管理システムの Git (ギット) も同時に使いましょう。Git とは Web サーバーで最も使われる OS である Linux を開発したリーナス・トーバルズが開発したバージョン管理システムです。現代のソフトウェア開発には欠かせないシステムです。

ソフトウェア開発者であれば Git を使うのは常識ですが、開発経験がない方のためになぜ Cursor でも Git を使うべきなのかを解説します。
Cursor のセーブポイントを作るために Git を使う
Cursor で AI と協働して作業しているとしばしばファイルがぶっ壊れます。その他にも AI と一緒に開発を進め、いろいろ作業したあとで「やっぱりあのときのやつがよかったな」ということがあります。そんなときのためにゲームのように「セーブポイント」を作っておくとやり直しがしやすいですよね。そのセーブポイントを作るためのシステムが Git です。
要するにアクセルの踏み方を覚える前にブレーキやハンドルのコントロール方法を身につけておきましょう、という話です。
Git のインストール方法
Git を使うには PC/Mac にインストールします。Windows と Mac でインストール方法が異なるのでそれぞれ解説します。
Windows
Windows で Git をインストールするには公式サイトからインストールするのが最も手軽です。
公式サイト Git – Downloading Package

ダウンロードしたインストーラーを起動してインストールしていきます。設定項目が多数ありますがほとんど初期設定のままで構いません。

変更を加えることを許可

後はずっと初期設定のまま Next を押していく

インストール先の設定

すでにその場所にフォルダがある場合は下図が表示される。その場合も「はい」で進む

オプションのインストール選択。これも初期設定のまま Next

スタートメニューの設定。これも初期設定のまま Next

コミットメッセージ等の入力に使用するテキストエディターを選択。初期設定は Vim になっているがここだけ Use Notepad (メモ帳) にしておくとよいかと。(後で変えられるので Vim のままでも構いません)

git init コマンドでリポジトリを作成したとき、最初に作成されるブランチ名を指定。初期設定のままで Next

環境変数の設定。ここも初期設定のままで Next

OpenSSH のインストール。ここも初期設定のまま Next

HTTPS 接続の設定。ここも初期設定のまま Next

改行コードの設定。ここも初期設定のまま Next

ターミナルの設定。ここも初期設定のまま Next

git pull コマンドの設定。ここも初期設定のまま Next

資格情報マネージャーの選択。ここも初期設定のまま Next

追加オプションの設定。ここも初期設定のままで OK です。これが最後の項目なので Install を押してようやくインストールが始まります。

インストールが終わるのを待ちます。

インストールが終わったらチェックを外して Finish

インストールできたか確認します。エクスプローラーのアドレスバーに cmd
と入力して Enter
を押します。

コマンドプロンプトが起動するので git --version
と入力して Enter
キーを押してください。以下のようにバージョンが表示されればインストール成功です。
git version x.x.x

Mac
Mac の場合は始めから Git がインストールされています。ただしターミナルでコマンドを入力してもすぐに使えません。使えるようにするため以下のように操作してください。
- Launchpad か Spotlight に「ターミナル」と入力して起動する
- コマンド
git --version
を入力して Enter キーを押す - 「ツールを今すぐインストールしますか?」でインストールする
以上です。
Git の初期設定
Git を使うためにはユーザー名とメールアドレスを設定します。これは誰がプログラムを更新したか分かるようにするために設定する必要があります。以下のコマンドをターミナルに入力します。ユーザー名、メールアドレスはあなたの環境に合わせて設定してください。
1 つずつコマンドをコピペして実行してください。
git config --global user.name "ユーザー名"
git config --global user.email "メールアドレス"
GitHub にも登録しておく
Git をインストールしたらついでに GitHub にも登録しておきましょう。Git は PC/Mac のローカル (そのコンピュータだけで) バージョン管理するだけですが、GitHub はその状態をクラウドでも管理できるようにするものです。現在 Microsoft の傘下にあります。無料で使えます。
GitHub の右上にある Sign up からアカウント登録してください。

単純に Cursor を使うだけであれば GitHub アカウントは必須ではありませんが、ソフトウェア開発者であれば必ずアカウントを持っているものですし、連携すると高度な機能が使えるようになりますのでこのタイミングで作っておきましょう。
GitHub はクラウドでバージョン管理するもの、と先述しました。そのため職場で開発中の状態を自宅で再現し、開発を継続してその状態をクラウドに同期、職場でも自宅で進めた作業の続きを行う、ということができるようになります。
というとても便利なものですが、ここでは GitHub の使い方は割愛します。
レポジトリの作成
Cursor でセーブポイントを作るためにまずは「レポジトリ (repository)」というセーブポイントの保管場所を作ります。ターミナルにコマンドを入力して行うこともできますが初心者のわかりやすさ優先のため GUI (グラフィカルユーザインターフェース) で操作する方法を解説します。
まずは下図の①をクリックして「ソース管理」を表示します。そんなの見当たらないんだけど、、、という場合は Ctrl+B
/Cmd+B
を押してみてください。
ソースとはソースコードのことで、コンピュータに指令するための文字列のことで、ざっくりいうとプログラムのことです。

つづいて②をクリックしてレポジトリを初期化します。するとこれを実行したときの私の環境では以下のように表示されました。下図の枠囲みした部分がバージョン管理の対象のファイルです。(未設定の場合は以下のリンクを参考にして作業を行ってください)

そもそもなぜこのように表示されるかというと Cursor で開いているフォルダが下図のようなファイル、フォルダがあるためです。
- .venv
- .vscode とその配下に launch.json というファイル
- basic.py

「.venv」が「ソース管理」に表示されていないんじゃない? と気がついたあなた、鋭いです。この .venv は仮想環境というもので普通はバージョン管理の対象にしません。なので気を利かせてソース管理に入っていません。
それから .vscode というフォルダと配下のファイルもソース管理の対象にしないことがあります。なのでそのための設定を行います。設定ファイルを作って、管理対象から外すファイル・フォルダ群をいろいろ記述して、ということをする必要があるのですが面倒なので拡張機能でサクッとできるようにしましょう。
ソース管理しないファイル・フォルダを設定する
「gitignore (ギットイグノア)」というやつです。ignore は無視という意味ですね。これをインストールします。

インストールしたらコマンドパレットを表示して「ignore」と入力し「Add gitignore」を選択し、(コマンドパレットは Ctrl+Shift+P
/Cmd+Shift+P
)

次の入力欄に「python」と入力して実行します。

すると下図のように .gitignore というファイルが追加されます。このファイルの中にはなにやらいろいろ書いてありますがこれはソース管理から無視するファイル・フォルダの名前です。

.gitignore を設定するときにテキストボックスに python と入力しましたが、これは python を扱うときによく設定されるものが詰め合わせセットになっています。しかし .vscode は入っていないので追加しましょう。
.gitignore のどこに記述してもいいのですがここでは末尾に追記します。.vs まで入力すると下図のようにサジェスト (提案) されるので Tab キーを押して確定し、Ctrl+S
/Cmd+S
で上書き保存してください。

この状態でもう一度「ソース管理」を開いてください。先ほどまでここにあった .vscode というフォルダが表示されていなければ成功です。すぐ表示更新されないことがありますので、その場合は再読み込みアイコンをクリックしてください。

2 種類のセーブポイント
これでひとまず Git でセーブポイントを作る準備ができました。では、セーブポイントを作っていきましょう。セーブポイントには、「仮のセーブポイント」と、「ちゃんとしたセーブポイント」の 2 つがあります。
Git のシステムでは仮のセーブポイントのことを「ステージ」、ちゃんとしたセーブポイントのことを「コミット」と呼びます。ここから先はその呼び方にしていきます。
コミット
まずざっくりとした理解をしていきましょう。コミットは正式な記録をつける領域で、「いつ、どのファイルに、どのような変更を行ったか」を記録します。そのさいどのような変更を行ったか振り返りやすいように、コメントをつけます。こうしておけば後から振り返った時に変更内容がすぐ分かりますし、その時のバージョンに戻せば、ファイルの中身をその時の状態に戻せます。
例えば下図はあるプロジェクトのコミット履歴です。

エディターで開かれている背景が緑色になっている部分は変更した箇所、赤色の部分は変更前の状態を表しています。
アクティビティバーにずらっと並んだコメントをクリックすると、その時どのような変更が行われたかがすぐわかります。
これがちゃんとしたセーブポイント、コミットによるバージョン管理です。Cursor で開発を進めるときはある程度実装して一区切りついたな、というところでコミットします。例えばログイン機能のための画面ができた、ファイル読み込み機能が一通りできた、グラフ作成機能が一通りできた、などのタイミングです。実際どのような区切りでコミットするかはチームの規約や経験によって変わってきます。
ステージ
ちゃんとしたセーブポイントであるコミットに対し、仮のセーブポイントであるステージはコミットしたいファイルを仮置きしておく領域です。ステージングエリアと呼びます。AI と協働して開発を進めるときはこれがなかなか便利なのです。
ステージ〜コミットまで
それでは変更をステージしていきましょう。現在のソース管理は下の図のようになっています。それぞれのファイルのところにマウスカーソルを持っていくといくつかのアイコンが現れます。
①が変更をステージするアイコン。その左隣にあるのは変更を元に戻すアイコン。その左隣にあるのはファイルを開くアイコンです。①の右上にある青い②は変更されたファイルが 2 つあることを表しています。

赤い②はコミット履歴 (セーブポイント履歴) がないことを表しています。 (セーブポイントには何もセーブされていません)
ちなみに下の図のように変更のところにカーソルを持っていくと変更があったファイルをまとめてステージしたり、元に戻したりすることもできます。

では話を戻して、basic.py をステージしてみましょう。

これでコミットできる準備が整いました。 メッセージを入力して①、コミットボタンを押せばコミットできます②。ではやってみましょう。コミットメッセージは、first commit としておきます。ちなみにメッセージ入力欄の右端にあるキラキラアイコンを使えば AI がコミットメッセージを作ってくれます。

下の図のようになれば成功です。コミット履歴をクリックすると、basic.py の変更点がエディターで開かれます。

では、 .gitignore もステージ → コミット、という一連の流れをやってみましょう。コミットメッセージは、second commit としておきます。

変更を元に戻す 2 つの方法
次はファイルに加えた変更を元に戻す 2 つの方法を解説します。ステージされたものを元に戻すのか、ステージされていないものを元に戻すのか、という 2 つです。
これらは Cursor で AI と協働して開発しているときに非常に便利です。例えば以下のような場面で活用できます。
- AI に「この機能を改良して」と依頼し提案を受け入れてみたものの、試してみたら期待と違った
- AI エージェントが編集中にファイルを壊した
ステージされているものを元に戻す
ステージされているものを元に戻すと、「ステージした時点」の状態に戻せます。ある程度の複雑性を持ったコードはひと区切りであるコミットまで複数回 AI エージェントとチャット・コード編集することになります。そんなときに細かく足場を固めていくために使います。
AI エージェントが編集したコードを受け入れ期待通りの動きになっていれば、ステージする。そして次に行ったやりとりによる変更でも期待通りになっていれば、またステージする、というように使います。
このようなサイクルにおいて、編集されたコードを受け入れてみたものの、実際試してみたら期待と違った時に細かくステージしていれば作業しやすくなります。
ロッククライミングで例えると細かく杭を打ち込んで少しずつ足場を固めていくイメージです。細かく打ち込んであれば滑落した時にその杭の場所でとどまることができます。一方、杭を細かく打ち込んでいなければ一気に下まで落ちてしまう = コミットしたところまで戻ってしまうというイメージです。
ステージされていないものを元に戻す
ステージされていないものを元に戻すと、「コミットしたところ」まで戻ります。AI エージェントが提案して受け入れた機能の一つ一つはちゃんと動くんだけど、最終的に統合したときになんだかうまく機能しないといったこともあります。イチから全部やり直そうときにそれまで行ってきた変更を一気に元に戻すといったときに使ったりします。
本来であれば、レポジトリ (セーブポイント) にブランチ (枝) を作って新機能を実装していくという流れが正しいのですが、ブランチを作るまでもないだろうと高をくくっていたものが、やってみたら意外と複雑になってしまい、なおかつ AI が思うように実装してくれなかった、といった時なんかに使えます。
Cursor で変更を元に戻す操作方法
ステージした変更を破棄する手順
では実際に Cursor で元に戻す操作を行ってみましょう。basic.py に適当な変更を加え、変更をステージしてみます。
a = 'apple' print(a) # ↓を加える print(a[0])
こんな風に AI によって複数行の変更が提案されますが、Esc
キーを押して提案を却下しておいてください。

4 行目、5 行目の右隣に緑色のバーが表示されていますが、これはコミット以降変更が加えられた行を表しています。
ステージに追加すると下の図のように「ステージされている変更」に表示されるようになりました。4 行目、5 行目の右隣のバーも消えました。

次は以下のように変更を加えます。
a = 'apple' print(a) print(a[0]) # ↓を加える print(a[1])
すると、「ステージされている変更」と「変更」の両方に basic.py が表示されるようになりました。6 行目の右隣に緑色のバーが表示されていますが、これは、ステージ以降に変更が加えられた行を表しています。

次は以下のようにしてみます。7 行目にも緑色のバーが表示されました。この状態で「変更を破棄」をクリックすると、緑色のバーが表示されている部分は、元に戻ります。
a = 'apple' print(a) print(a[0]) print(a[1]) # ↓を加える print(a[2])

次のようなダイアログが表示されるので「変更を破棄」を選択すると

下の図のようにステージした時点に戻りました。

変更のステージング解除
次は「変更のステージング解除」から、コミット時点までの変更を破棄するという流れを見ていきます。下の図の変更のステージング解除をクリックしてください。

すると下の図のようになります。4 行目、5 行目に緑色のバーが表示されました。これはコミット以降変更が加えられたことを表していると説明した通りです。この状態で「変更を破棄」をクリックすると、4 行目、5 行目が破棄されます。

再びダイアログが表示されるので変更を破棄します。

これで、コミット時点まで一気に戻ることができます。
細かくステージしていく練習
先ほどは 6 行目、7 行目の変更を加えた時に細かくステージしていませんでしたので今度は細かくステージしていく練習をしてみましょう。
この状態で再び変更をステージ。

6 行目に変更を加えて、再び変更をステージ。

7 行目にも変更を加えて再びステージ。

次は 8 行目に変更を加えてみます。この状態で変更を破棄するとどこまで戻るかわかりますか?

正解は最後にステージしたところまで = 7 行目までです。下の図の状態まで戻ります。

細かくステージすればするほど、その時点の状態を一時保存しておけるというイメージがついたのではないでしょうか。
Cursor では「元に戻す」機能はこれ以外にも AI とのチャットスレッドのある時点に戻すボタンがあります。下図の矢印で示したボタン「Restore checkpoint」をクリックすると AI エージェントが加えた変更をその時点に戻って別の変更を依頼できます。

実際にはこうした機能もうまく組み合わせながら試行錯誤してプログラムを作っていくことになります。次はこの機能との組み合わせを見てみます。
Restore checkpoint
Restore checkpoint (Restore = 元に戻す) の機能を説明するとともに、AI エージェントとチャットしながら開発する方法も併せて解説していきます。
まずは下の図のようにチャット欄に「フィボナッチ数列を表示する関数を実装」と入力して↑ボタンを押すか Enter
キーを押してください。

すると下図のようになります。矢印で示した②③④の Accept をクリックすると提案されたコードを受け入れます。
②はそのブロックを受け入れるボタンです。画像ではブロックが一つしか表示されていませんがもっと規模が大きな変更ではこのボタンが複数箇所に現れます。それを一つ一つレビュー評価してボタンを押していきます。Reject をクリックすると提案を拒否します。

③はファイルに加えられた変更をすべて受け入れるボタンです。また、今回の依頼では一つのファイルにしか変更を加えていませんが、規模が大きくなると複数ファイルにまたがって変更が加えられることがあります。そういう時は次のファイルもしくは前のファイルを表示するボタンが表示されます。
④は、今回のやりとりで加えられた変更をすべて一括で受け入れるボタンです。バイブコーディングの場合は、③か④を多用することになると思います。
今回のフィボナッチ数列を表示する関数を実装という依頼はすべて受け入れるようにしておきます。
続けて変更をステージします。

次は Restore checkpoint の機能を使って、加えた変更をなかったことにして別の依頼をしてみます。下の図の矢印部分に入力されていた「フィボナッチ数列を表示する関数を実装」を消して、「fizzbuzz 関数を実装」に書き換えて、Enter キーを押します。

すると下の図のようなダイアログが表示されます。 これは
以前のメッセージから送信しますか?前のメッセージから送信すると、ファイルの変更がこのメッセージの前に戻され、このメッセージ以降のメッセージは消去されます。
という意味で要するにこのやりとり (フィボナッチ関数を実装) 以降の変更がすべて破棄されますがいいですか? という確認です。

Continue and revert をクリックするか Enter
キーを押してください。すると、fibonacci 関数が消えて、 fizzBuzz 関数が実装されました。 これも Accept で全て受け入れておきます。
この状態で変更を破棄をクリックするとどうなるでしょうか

変更を破棄すると、先ほどフィボナッチ関数をステージしましたのでそこまで戻ることができます。

こうすることで AI が行った提案を受け入れたり元に戻したりが柔軟になります。
が正直なことを言うと、あまりぐちゃぐちゃこのような操作をしなければならないというのは、AI に対するプロンプトに問題がある可能性があります。
こういう複雑な状況に陥ったら一度立ち止まって状況を整理してプロンプトの投げ方を見直してみる。その上で新たにスレッドを立てて AI エージェントに依頼する。という風にした方が良いかもしれません。が、引き出しの一つとしてこのような方法もあると覚えておくのは有益なことです。