記事を書いた目的
DjangoでWebアプリを作成し、デプロイしてからというもの、何度もコードを修正してきました。その度に、SourceTreeやVSCodeのソース管理などのGUIな方法でコミットしてきました。ただ、書籍に書いてあったコミットの手順をそのまま利用するのみで、Gitやバージョン管理そのものについてはほとんど理解していませんでした。
なんか修正がうまくいっているみたいだけど、なんでうまくいっているのか説明できなくて気持ち悪いな〜。GitとかGitHubとか、わかったんだかわかっていないんだか、よくわからないな〜。こんな状態が長くてずっとモヤモヤしていました。今後、ずっと一人でWebアプリを開発するなら問題ありませんが、将来複数人で開発をするときには、Gitについてわかっていないとお仕事にならないみたいですね。そういうわけで、今更ですが、Gitについて勉強しています。
今回は、Gitでコードの変更を記録する方法(add, commit)を勉強します。
Gitに登場する専門用語は簡単に記事にしましたので、ぜひ参考にしてみてください。
記事: Gitとは
最初にやっておくこと
基本コマンド
目的 | コマンド |
---|---|
簡易ヘルプを表示したい | git |
バージョンを表示したい | git --version |
初期設定
Gitを使うには初期設定が必要です。作業履歴に名前とメールアドレスが使われるので、まず登録しておきます。
目的 | コマンド |
---|---|
リポジトリに名前を登録したい | git config --global user.name "eric" |
リポジトリにメールアドレスを登録したい | git config --global user.email "eric@example.com" |
登録情報を確認したい | git config --list |
ディレクトリを作成し、そこにリポジトリを作ります。作成したディレクトリ(myapp)のファイルが記録対象となります。作業履歴はこのディレクトリの「.git」という隠しディレクトリに記録されています。lsコマンドで見てみると、「.git」という隠しディレクトリが作成されています。
mkdir myapp
cd myapp
git init # Gitを使う作業ディレクトリを宣言する
リポジトリにファイルを追加し、コミットする
用語の確認
-
コミット:変更履歴を隠し領域に記録する操作のことです。変更履歴自体のこともコミットと呼びます。
-
ワーキングディレクトリ:普段プログラミングなどの作業しているディレクトリのことです。ワーキングツリーとも呼ばれます。
-
ステージングエリア:ファイルを仮登録する場所です。インデックスとも呼ばれます。
-
リポジトリ:実際に変更履歴が記録される場所です。
リポジトリにファイルを追加し、コミットするまでのステップ
- ワーキングディレクトリでファイルを作成
- ステージングエリアにファイルを仮登録
- メッセージを追加してファイルをローカルリポジトリにコミット
目的 | コマンド | メモ |
---|---|---|
リポジトリやステージングエリアの状態を確認する | git status | |
ステージングエリアに仮登録する | git add ファイル名 | |
ステージングエリアに複数のファイルをまとめて仮登録する | git add . | |
ステージングエリアの内容をコミットする | git commit | コミットしたらvimが起動するので、コミットメッセージを入力する |
仮登録とコミットを同時に実行する | git commit -a | 新規で作成したファイルは対象外なので、git add コマンドを使う |
コミットメッセージを同時に指定する | git commit -m "メッセージ" | |
仮登録とコミットを同時に実行し、メッセージを指定する | git commit -a -m "メッセージ" | |
コミット履歴を確認する | git log |
vimの使い方
vimとは、シェルで利用できるテキストエディタです。Gitでコミットしようとすると、コミットメッセージの入力のために、自動的に起動します。
編集モードに切り替える
- a 現在のカーソル位置の右から入力する
- A 現在の行の末尾に入力する
コマンドモード
- 編集モードからコマンドモードに切り替える
- u 元に戻す
- :wq 保存して終了
- :q! 保存しないで終了
まとめ
今回は、リポジトリにファイルをコミットする方法を勉強しました。
作成、修正されたファイルはステージングエリアに仮登録され、(メッセージを追加して)ローカルリポジトリにコミットされます。コミットには、この2段階の作業が必要なのですね。次回は、現在の状態や変更箇所を確認する方法 (log, diff)を勉強します。