webコーダーのsaco @sacocco_sacoya です。
2024年4月よりもりけん塾の塾生となりました。
最初の勉強として、gitハンズオンでgitについて学んだメモを記します。
(自分用メモとして勉強になったことのみメモします。)
gitコマンド
git clone リポジトリのURL
git hubでリポジトリを作成したら、リポジトリURLをコピーしてターミナルに上記コマンドを入力する。
git status
gitがあるディレクトリ以下のファイルの変更状態を表示してくれる。
git add
変更したファイルをステージングエリアに追加してくれる。
git add -u
変更された全ての差分をインデックスにUPする -uオプション。
git statusでmodifiedとなっている変更が対象。
newは対象外。newも含める場合は git add –all
git commit
ステージングエリアに追加された変更をリポジトリの履歴に(永続的に)記録するためのコマンド。
ローカルリポジトリに保存され、それらの変更に関するコミット(変更履歴の一単位)が作成される。
コミットを行う際にはメッセージを付与する。
メッセージはVimエディタが起動する。(「その他メモ」項目内にVimエディタの詳細メモあり)
Vimエディタで1行目にタイトルを記述し、3行目に本文を記述する。
↓commitした結果
git commit -m “タイトル” -m “本文”
このコマンドでも上記と同じくコミットすることができる。
git commit -m “タイトル”とすれば本文は省略してコミットできる。
git commit –amend -m “タイトル” -m “本文”
1つ前のコミットを編集し直すことができる。
コミットの内容を誤ったときに便利。amendとは修正という意味。
git push
ローカルのコミットをリモートリポジトリにアップロードする。
これにより、他の人もその変更をリモートリポジトリからフェッチまたはプルできるようになる。
git fetch
リモートリポジトリのデータをローカルにあるブランチにダウンロードする。
この段階ではローカルの作業中のファイルやブランチにはなんの変更も行われない。
git fetchでは、最新のコミット、ブランチ、タグなどの情報を確認することができるので、ローカルの作業に影響を与えずに、他の開発者による変更を確認することができる。
安全にコードの更新と統合を行うためのもの。
git merge
git fetchで取得した変更を、現在チェックアウトしているブランチにマージ(統合)してくれる。
これにより、リモートリポジトリでの変更がローカルの作業ブランチに反映される。
git pull
リモートリポジトリから最新の変更をローカルリポジトリに取り込む操作。
git fetchとgit mergeを同時に行ってくれるもの。
他の開発者が行った変更(リモートリポジトリに上がっているもの)を自分のローカル環境に取り込むことができる。
↓pullしたときの挙動。feature/aというブランチで作業し、pushした内容をmainブランチにpullした。
git leflog
Gitのreflog(参照ログ)を利用して、過去に入力したコマンドを確認できる。
git branch
今いるブランチを確認できる。
git checkout ブランチ名
ブランチの切り替え(移動)を行うことができる。
git checkout -b ブランチ名
ブランチを新たに作成して、そこに移動する。
git diff
ワーキングディレクトリの現在のファイルの状態と、ステージングエリアのファイルの差分を確認できる。
ステージングされていない(addしていない)変更点を確認したい時に使う。
git diff –cached
ステージングエリアと1つ前のコミットの差分を確認できる。
git log / git log –oneline / git log –graph
コミット履歴を見れる。
git log なら詳しく確認でき、 git log –onelineは1行で簡潔に確認できる。
git log –graphは視覚的・直感的に確認することができる。
git push origin head
現在チェックアウトしているブランチ(HEADが指しているブランチ)の最新の変更をリモートリポジトリの同じブランチ名に反映するコマンド。リモートにそのブランチがなければ新規作成してくれる。
↓ブランチが新規作成された場合
origin とは、リモートブランチのアドレス名のこと。
gitでは、リモートリポジトリにアドレス名(名前)をつけることが一般的で、最初にリポジトリをクローンする際にデフォルトで設定されるリモートリポジトリの名前が origin となっている
headとは、ブランチのHEADの位置(多くの場合、ブランチの最新のコミットを指す。)
HEADとは、「現在チェックアウトしているブランチ」(ユーザーが作業しているブランチ)
git reset –soft HEAD^
1つ前のコミットをリセットして、ステージング状態に戻してくれる。
プルリクエスト
プルリクエストとは、開発者がコードの変更を共有し、レビューを受けるための手段。
各コードについての疑問を質問するなど、コード品質改善のためのコミュニケーションが取れる機能。
↓新しいブランチからpushしたときの挙動
このURLへアクセスすると、プルリクエストの画面へ遷移できる
遷移すると以下のような画面が表示される。
↓赤枠内はコミット番号
任意の行のプラスマークをクリックすると、フォームが表示され、コードレビューを行う人に対してメッセージを残しておくことができる。
github上でプルリクエストを取り込む
変更箇所を確認して、問題なければ取り込む。Merge pull requestボタンを押す。
マージコミットのタイトルと本文を確認して、問題なければConfirm mergeボタンを押す。
mainブランチにfeature/aブランチの変更がマージされた。
コミット履歴を確認すると、マージした際に自動生成されたマージコミットが追加されている。
(マージを行うと、「マージコミット」というコミットが1つ追加される。)
その他メモ
Untraced file
git上で管理されていない(commitされていない)ファイルのこと。
インデックス(ステージングエリア)
インデックスとは履歴に残すかどうかを判定する場所。ステージングエリアとも呼ばれる。
ワーキングディレクトリ
ローカルリポジトリの一部で、ユーザーが直接ファイルを編集する場所。
カレントブランチ
現在チェックアウトしているブランチ
マージ
異なるブランチの変更を統合すること
HEAD
現在チェックアウトされている最新のコミットを指す。
コミットの並び順
Gitのログは、最新のコミットが一番上に表示され、下に行くほど過去のものになる。
コマンド
open .
このコマンドを入力するとFinderを立ち上げてくれる。
code .
ターミナルからVS Codeを立ち上げることができる。※以下の設定が必要
VS Codeを開き、コマンドパレットを開き(⌘ + shift + P) shellと入力してcodeというシェルコマンドをインストールし、ターミナル上で code . とするとVS Codeが立ち上がる
※ もりけんさん曰く:時々立ち上がらなくなることがあるので、その場合はシェルコマンドをアンインストールしてからインストールし直すと◎
.(ドット)
カレントディレクトリと、そのサブディレクトリ内全てを対象とすること
//例
git add .
Vimエディタ
エディタ起動時は「ノーマルモード」となっているので、「入力モード」に切り替える必要がある。
「i」キー:入力(インサート)モード
「Esc」キー:入力モードからノーマルモードに戻る
「:wq」:保存して終了
「:q!」:保存せずに終了
「:wq!」:変更内容を強制的に保存し、何かしらの理由でファイル書き込みが不可の場合や、他のプロセスがファイルを使用中でもVimを終了させることができる。(保存+強制終了)
「w」はwrite、「q」はquietの略。
control ^ ショートカットキー
^ + w
一単語分削除
^ + u
全部削除
^ + p
履歴を遡る
^ + r
gitコマンドを検索してくれる
感想
このハンズオンを学ぶまで、基本的にはGitHubDesktopを利用しながら、こわごわGitを触っているレベルでしたが、ターミナルで操作するgitの基本的な流れを学習でき、今回初めてプルリクエストまで学ぶことができました。
途中、ハンズオンの流れとは違うブランチに居るまま作業してしまい、ハンズオン通りの挙動にならず混乱しましたが、再度リポジトリを作り直して1から確認しなおすことでなんとか最後まで進むことができました。
(教材の文章はきちんと読まないといけないと反省しました。)
まだ完全に理解できたとは言い難いですが、少しずつ慣れていきたいです。
もりけん@terrace_tech さん、貴重な教材をありがとうございました。
もりけんさんのブログ→ 武骨日記