Gitの超基本
5ヶ月前にGitの勉強をしたっきりでそれ以降さわってなかったらすっかり忘れてました。
メモアプリを作成する課題の提出方法が、GitHubにpublicリポジトリを作成してアップするということだったので、その流れに沿ってみていく。
概要図↓
※ステージングエリアはインデックスとも呼ぶ。
publicリポジトリにpushするまでの流れ
①git initする
% git init Initialized empty Git repository in /Users/ほにゃらら/sinatra_memo/.git/
.git
ファイルができる。
% ls -a . .. .git memo.rb memos public views
②git statusでリポジトリの状態を確認
% git status On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) memo.rb memos/ public/ views/ nothing added to commit but untracked files present (use "git add" to track)
まだGitの管理下にないので"Untracked"な状態。
③git addする
% git add .
git add .
でカレントディレクトリ配下のすべてのファイルをまとめて追加できる。便利。
④git statusで確認
% git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: memo.rb new file: memos/memos.json new file: public/public.css new file: views/details.erb new file: views/edit.erb new file: views/layout.erb new file: views/memos.erb new file: views/new.erb
git addでステージングエリアに登録されたので、"new file"として表示される。
⑤git commitする
% git commit [master (root-commit) 02e0203] sinatraメモアプリ作成課題 8 files changed, 255 insertions(+) create mode 100644 memo.rb create mode 100644 memos/memos.json create mode 100644 public/public.css create mode 100644 views/details.erb create mode 100644 views/edit.erb create mode 100644 views/layout.erb create mode 100644 views/memos.erb create mode 100644 views/new.erb
コミットを実行し、コミットメッセージを書く。コミットメッセージについては後述。
念のためgit statusで確認。
% git status On branch master nothing to commit, working tree clean
⑥リポジトリを作成しpushする
GitHub上で"memoapp"というpublicリポジトリを作成した。
URLを指定する。
% git remote add origin https://github.com/ユーザID/memoapp.git
そしてpushだ!!が、うまくいかない。
% git push origin master remote: Invalid username or password.
前にGitHubのユーザIDを変更したことがあったのでそのせいかなと思い、リセットを試みる。
% git config --global credential.helper osxkeychain
新たにIDとパスワードを入力してみたが変わらず。 ってことはパスワードが間違ってる...?と思って一度パスワードを再設定した。
しかし相変わらずダメ。
remote: Invalid username or password.
ググってリモートの設定を修正してみた。
参考:GitHub へのアクセスで remote: Invalid username or password と言われたので、git remote set-url でリポジトリを指定した。 - Qiita
% git remote set-url origin git@github.com:ユーザID/memoapp.git
再びpushしてみるとできた!
% git push origin master Enumerating objects: 13, done. Counting objects: 100% (13/13), done. Delta compression using up to 4 threads Compressing objects: 100% (11/11), done. Writing objects: 100% (13/13), 3.21 KiB | 821.00 KiB/s, done. Total 13 (delta 1), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (1/1), done. To github.com:udaikue/memoapp.git * [new branch] master -> master
修正して再提出
課題提出後、修正があったので再提出することになった。
% git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: memo.rb modified: memos/memos.json modified: views/details.erb modified: views/memos.erb
すべてのファイルを変更したわけじゃなく、これら4つのファイルを変更した。
% git add memo.rb memos/memos.json views/details.erb views/memos.erb
ファイル名を全部並べて書いたけど、オプションがあります。
参考:git add -u と git add -A と git add . の違い | note.nkmk.me
コミットして無事終了。
% git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: memo.rb modified: memos/memos.json modified: views/details.erb modified: views/memos.erb
コミットメッセージに何を書くか問題
フィヨルドブートキャンプのメンターであるkomagataさんの記事↓
俺の考えるコミットメッセージの書き方 - komagataのブログ
これ、心にとめておきたい。
「いつ (When) 」コードに対していつ変更を加えたのかはタイムスタンプを見れば分かる
「どこで (Where) 」コードに対して何を変更を加えたのかはリソース (file/dir) 名で分かる
「誰が (Who) 」コードに対して誰が変更を加えたのかは author を見れば分かる
「何を (What) 」コードに対してどうやって変更を加えたのかは diff を読めば分かる
「なぜ (Why) 」コードに対してなぜ変更を加えたのかはコミットメッセージを読めば分かる
「どうやって (How) 」コードに対してどうやって変更を加えたのかは実装を読めば分かる