【Git①】Gitの環境構築&使い方の全て

Contents

Gitの初期設定

gitの初期設定をしていきます。GitHubにコードをアップロードする前のローカルのgitのリポジトリになります。

Gitの初期設定
gitコマンド

$ git config –global user.name <ユーザーネーム> : ユーザーネームを設定
$ git config –global user.email <メールアドレス> : パスワードを設定
$ git config –global core.editor ‘code –wait’ : デフォルトのIDEを設定(VScode)
$ git config –list : 設定したローカルリポの情報確認

※–globalオプションを付与することでgitコマンド操作全てに設定を紐付きます

Git LFSの設定

gitで大きいファイルの操作ができるように設定していきます

データをローカルリポジトリへ保存(commitするまで)

ローカルリポジトリの作成

git initコマンドを叩くことで、gitに必要なファイル群を含む.gitが生成される
✅ .gitディレクトリ: ①リポジトリ(圧縮ファイル、ツリーファイル、コミットファイル) ②インデックスファイル ③設定ファイル
✅ .git/objects : リポジトリ本体
✅ .git/config : gitの設定ファイル

gitコマンド

$ git init : gitに必要なファイル群を含む.gitを作成

データをworking tree→stageへ追加(add)
gitコマンド

$ git add <ファイル名> : カレントディレクトリの<ファイル名>をstageに追加
(git add . : カレントディレクトリのファイルを全てaddする)

$ git status : working tree⇔stage、stage⇔ローカルリポ間での変更ファイルを表示

stage→ローカルリポジトリへ保存(commit)
gitコマンド

$ git commit -m “ログに残すコメント” : stageにあるデータをローカルリポに追加

$ git commit -v : ファイルの変更内容を確認(stage⇔ローカルリポ間の違いを表示)

gitのファイル操作

ファイル修正での差分(working treeー⇔stage⇔ローカルリポ間)を確認
gitコマンド

$ git status : working tree⇔stage⇔ローカルリポの状況を確認

$ git diff : working tree⇔stageの変更差分を確認
($ git diff <ファイル名>: 特定ファイルの確認)
$ git diff –staged :stage⇔ローカルリポの変更差分を確認

変更履歴の確認
gitコマンド

$ git log : 変更した履歴の確認

$ git log –oneline: 変更した履歴を1行で表示

$ git log -p : commitしたログ + working tree⇔stage⇔ローカルリポの差分を表示

$ git log -n <commit数> : 表示するコミット数を指定して表示

commitのコメントの修正()
gitコマンド

$ git commit –amend -m “新しいコメント” : 新しいコメントに修正する

commitの取り消し(revert, reset)

fileの削除(rm)
gitコマンド

$ git rm <ファイル名> : working treeとcommitしたファイルを削除する

$ git rm -r <フォルダ名> : working treeとcommitしたフォルダを削除する

$ git rm –cached <ファイル名>: working treeのファイルは残し、commitしたファイルのみ削除する

ファイルの移動や変更を記録
gitコマンド

$ git mv <旧ファイル> <新ファイル> : <旧ファイル>を削除し、<新ファイル>に変更してその内容をstageにaddする

working treeのファイルの変更を取り消す

✅ checkout: working treeのファイルをstageの状態にする

gitコマンド

$ git checkout — <ファイル名> : ファイルの変更を取り消す

$ git checkout — <ディレクトリ名> : ディレクトリ変更を取り消す

$ git checkout — . : 全変更を取り消す

working tree(ローカルリポジトリ)に別ブランチからファイル/フォルダをコピーする
gitコマンド

$ git checkout <ブランチ名> — <ファイル名> : 別ブランチからファイルをコピーする

$ git checkout <ブランチ名> <ディレクトリ名> : 別ブランチからフォルダをコピーする

stage, commitした変更を取り消す

✅ add/commtでstageに上げた/コミットした変更を取り消すだけなので、ワークツリーのファイルに影響は与えない

gitコマンド

$ git reset HEAD <ファイル名/ディレクトリ名> : ファイル/ディレクトリの変更を取り消しする

$ git reset HEAD . : 全変更を取り消す

$ git reset HEAD^ : 直前のコミットを取り消す(HEAD~{n}: n個前のコミットの意味)

$ git revert <コミットID> : ワークツリーを指定したコミット時点の状態にまで戻し、コミットを行う

直前のコミットを修正する

✅ GitHubにpushしたcommitに関してはこのコマンドは使わない(他のユーザーがその間にpull指定いると厄介なので)

gitコマンド

$ git commit –amend : 直前のコミットを修正する

GitHub(リモートリポジトリ)にデータをpushする

Personal access tokensの設定

GitHubにpushする際に、ユーザー名とこのPersonal access tokenを使い認証を行う必要があります。その設定について解説していきます。

👇 GitHubのHPでユーザー情報から”Settingsをクリック”

👇 “Developer settings”をクリック

👇 “Generate new token”をクリック

👇 “Note”にこのtokenの題名を記入します、今回は認証ということで”admin”としました。”Expiration”はこのトークンの有効期限を表します、短ければ短いほどsecureではありますが、今回は90daysとします。そして”select scopes”で付与される権限を選択します、今回は全てにチェックを入れます。

👇 全てにチェックを入れ終わったら、”Generate token”をクリックします。

👇このようにトークンが生成されればOKです。
⚠️生成されたpersonal access tokenはpushする際に必要になるので、メモ帳等で保管しておくこと

GitHubのHPにアクセスし、リモートリポジトリを作成する

👇 ホーム画面からレポジトリの”New”をクリックします

👇 “Repository name”に任意の名前(今回は’git_tutorial’)を入力し、”Public”にチェック(鍵なしで公開する)し、”Create Repository”をクリックします

👇 すると下記のような画面に移ります。これでリモートリポジトリの作成は完了です。
次にローカルにあるコードをリポジトリにpushしていきます、コマンドを開いて下記の部分を打ち込みます。

リモートの情報を表示する
gitコマンド

$ git remote : リモート名を表示する

$ git remote show <リモート名> : $ git remoteより詳しい情報を表示する

$ git remote -v : リモートリポジトリのURLを表示する

GitHub上にリモートリポジトリを新規追加&pushする
gitコマンド

$ git remote add <リモート名> <リモートURL>
$ git remote add origin https://github.com/<user>/<project_name>.git
          : originというリモート名でURLのリモートリポジトリを新規追加する

$ git push <リモート名> <ブランチ名(ローカル)>: リモートリポジトリに追加(push)する
ex. $ git push -u origin master(-uオプションを付与することで、次回以降$ git pushのみでコードをプッシュすることができる)

👇 GitHubのリモートリポジトリをリロードすると、下記のような画面となりローカルリポジトリのファイルがpushできていることが確認できます。

リモートリポジトリのリモートurlを変更する
gitコマンド

$ git remote set-url <リモート名> {新しいリモートURL} : 新しいリモートURLに変更する

GitHub(リモートリポジトリ)からデータを取得する(fetch, pull)

リモートから情報を取得する(fetch)

✅ リモートリポジトリ⇨ローカルリポジトリにデータを取得
✅ ワークツリーにはデータの反映はされない

gitコマンド

$ git fetch <リモート名> : リモートリポジトリからローカルリポジトリ(リモートブランチ)にデータを取ってくる
⚠️ワークツリーに取ってきたデータは反映されないので注意
 (ワークツリーへの反映は $ git merge <リモート名>/<ブランチ名>を使う)

リモートから情報を取得する(pull)

✅ リモートリポジトリ⇨ローカルリポジトリ&ワークツリーにデータを取得
✅ ワークツリーにもデータが反映される
✅ $ git fetch origin & $ git merge origin/masterと同じ

gitコマンド

$ git pull <リモート名> <ブランチ名> : リモートリポジトリからローカルリポジトリデータにデータをコピーし、ワークツリーにデータを反映させる(ex. $ git pull origin master)
⚠️ワークツリーへのmergeまで実行される(git fetch と git mergeを同時に実行)

👇コマンドは省略可能
$ git pull

Pullの設定をリベース型に変更する

✅ マージコミットが残らないため、GitHubの内容を取得したいだけの時は–rebaseを使う
✅ グローバル設定する場合は$ git config –global pull.rebase trueを設定(masterブランチをpull捨時だけ⇨$ git config branch.master.rebase true)

gitコマンド

$ git pull –rebase <リモート名> <ブランチ名> : リベース型でPullする

リモート名を変更・削除する
gitコマンド

$ git remote rename <旧リモート名> <新リモート名>: リモート名を変更する
($ git remote rename bak backup)

$ git remote rm <リモート名>: リモート名を削除する
($ git remote rm backup)

ブランチ(branch)を立てて作業する

✅ ブランチ: 並行して複数機能の開発が可能(他人のコード修正による影響を受けない)
✅ コミットを指し示すポインタの役割を担う(コミットはスナップショットを記録→ブランチはスナップショットを指しているとも言える)

gitコマンド

$ git branch : ブランチ一覧表示
$ git branch -a : 全てのブランチ一覧表示

$ git branch <branch名> : 新しくブランチを作成する(ブランチの切り替えは行われない)
$ git branch <branch名(ローカル)> <branch名(リモート)>
        : リモートのブランチから新しくローカルのブランチを作成する

$ git checkout <branch名> : ブランチを切り替える
$ git checkout -b <branch名> : 新しくブランチを作成し、切り替える
$ git checkout -b <branch名> [origin/<branch名>] : ローカルに<branch名>を作成し、リモートブランチ([origin/<branch名>])をpullする

$ git log –oneline –decorate : 各ブランチがどのコミットを指しているか確認

branchを変更・削除する
gitコマンド

$ git branch -m <ブランチ名> : 現在作業中のブランチ名を変更する
($ git branch -m new_branch)
$ git branch -d <ブランチ名> : 現在作業中のブランチ名を削除する
($ git branch -d feature)
$ git branch -D <ブランチ名> : 現在作業中のブランチを強制削除する

リモートリポジトリのbranch削除
gitコマンド

$ git branch –remote : リモートリポジトリのブランチを確認

$ git push –delete <リモート名> <ブランチ名> : リモートリポジトリのブランチを削除する

マージ(merge)する

✅ mergeする : 他の人の変更内容を取り込む作業のこと
✅ Fast Forward : ブランチが枝分かれしていない時のマージ(ブランチのポインタを前に進めるだけ)
※FastForwardを設定しない場合は$ git config –global merge.ff false
✅ Auto Merge : ブランチが枝分かれしている時の基本的なマージ(マージコミットという新しいコミットを作る)

gitコマンド

$ git merge <ブランチ名> : 作業中のブランチが指しているコミットに指定したブランチのコミットをマージする

$ git merge –no-ff <ブランチ名> : ブランチをマージ(結合)する

$ git merge <リモート名/ブランチ名>: 作業中のブランチが指しているコミットにリモートリポジトリのブランチのコミット内容をマージする
(ex. git merge origin/master : originのmasterブランチを作業中のブランチにマージする)

$ git cherry-pick <コミットid> <コミットid>… : 特定のコミットをマージする

$ git merge stash@{0} : stash領域のファイルをマージする

conflictが発生した場合の対処

✅ conflict発生した場合はファイルの内容を書き換えることで解決する(下記を確認ください👇)
✅ confllictを起こさないように複数人で同じファイルを変更しない
✅ pullするときはpullしたいブランチにいるか確認を必ずする

masterブランチとfeatureブランチのindex.htmlでconflictが発生した場合を見ていく。
👇$ git mergeコマンドを実行するとIDEに下記のような記述が追加される。

👇この内容を下記のように修正し再度マージすることで解決できる。

👇コマンドで下記を実行。上手くcommitすることができました。

リベース(rebase)する

✅ あるブランチのコミットを、ローカルブランチに統合したい時の利用が多い
✅ 変更を統合する際に、履歴を整理するために使う
✅ GitHubにPushしたコミットにはリベースしてはいけない(pushできなくなる)

gitコマンド

$ git rebase <ブランチ名> : ブランチの起点となるコミットを別のコミットに移動する
(e.g.) $ git rebase origin/refactor : リモートブランチ(refactor)を現在のローカルブランチに追従させる

リベースで履歴を修正する
gitコマンド

$ git rebase -i <コミットID> : コミットを修正する
      (ex. $ git rebase -i HEAD~3 : 3つ分の過去のコミットを修正する)

$ git commit –amend : 現在のポインタがいるcommitを修正する
$ git rebase –continue : 次のコミット修正へ進む
$ git rebase –skip : 現在のcommit修正しているrebaseをスキップし、次のcommit修正に進む
$ git rebase abort : リベースを終了する

コミットのコメントを修正する
コミットの順番を変更する
コミットを一つにまとめる

作業を一時避難する(stash)

✅ 作業中でコミットしたくないが別のブランチで作業する場合、作業を一時避難できる

✅ stash: 隠す

gitコマンド

$ git stash : 作業を一時避難する(git stash save : 作業を一時避難する)

$ git stash list : 避難した作業を確認する

$ git stash apply : 最新のstash 内容を復元し、stash内容を残す($ git stash apply –index : ステージの状況も復元する)
$ git stash apply [stash名] : 特定の作業を復元する($ git stash apply stash@{1})

$ git stash drop : 最新のを削除する

$ git stash drop [stash名] : 特定の作業を削除する($ git stash drop stash@{1})

$ git stash pop : 退避した最新の作業を元に戻し、stashのリストから消す

$ git stash pop [stash名] 退避した作業を元に戻し、stashのリストから消す

$ git stash clear : stash中の全作業を削除する

タグについて(tag)

✅ コミットを参照しやすくするために名前をつける
✅ 注釈付き(annotated)版と軽量(lightweight)版の2種類ある

タグを作成し、確認する
gitコマンド

$ git tag : タグ一覧を表示する

$ git tag -l “202109” : パターンを指定してタグを表示(202109で検索)

$ git tag -a [タグ名] (-m “[メッセージ]”) : 注釈付きタグを作成する(-a: annotated)

$ git tag [タグ名] [コミットID] : 軽量タグを作成する

$ git show [タグ名] : タグのデータを表示する(タグ作成者、作成日時、注釈メッセージ、コミット)

タグをリモートリポジトリに送信する
gitコマンド

$ git push [リモート名] [タグ名] : タグをリモートリポに送信する

$ git push origin –tags : タグをリモートリポに一斉送信する

GitHub上からGitリポジトリのコピーを作成する(git clone)

gitコマンド

$ git clone <GitHub HTTPSアドレス> (<ローカルリポのファイル名>)
: ファイルとGitリポジトリをコピーする

$ git clone -b <ブランチ名> <GitHub HTTPSアドレス> : ブランチを指定してgit cloneする

今回は例として、GitHub上から『Atom』というプロジェクトをクローンしてみます。
👇 GitHubのHPにアクセスし、”Atom”と検索します。検索結果の”atom/atoom”をクリックします。

👇 “Code”からSSH keyをコピーします。

👇 ターミナルを開き、任意のフォルダにatomをクローンします。このようにGitHubからコピーしてくることができます。

SSH keyの作成〜GitHubへのSSH設定まで

公開鍵と秘密鍵の作成(ローカル側の操作)

GitHubへのSSH接続登録とコードのpush

*ここでGitHub側の操作が入る

Gitコマンドにエイリアスをつける

✅ エイリアス:”別名”という意味→gitコマンドにエイリアスを設定することで、gitコマンドを簡略化することができる

ターミナル上で設定する
[~] $ git config –global alias.ci commit: commitを”ci”に簡略化

[~] $ git config –global alias.st status: statusを”st”に簡略化

[~] $ git config –global alias.br branch: branchを”br”に簡略化

[~] $ git config –global alias.co checkout: checkoutを”ch”に簡略化

.gitignoreファイルの設定

✅ 管理しないファイルを意図的に指定することができる
✅ 自動生成のファイルやパスワードが記載されているファイルはGitHub上にあげないように注意する

.gitignoreファイルの書き方

.gitignoreのcacheを削除する

コメントを残す

メールアドレスが公開されることはありません。