Git
Git → バージョン管理ツール(いつ、誰が、どのファイルに対してどのような変更を行ったか?という履歴を記録しておくためのツール)
○ Repositories(リポジトリ)・・・ソフトウェア開発において、ソースコードや開発に関わるデータ置き場のこと
Aさんローカル🖥← リモート(Gitサーバー)→Bさんローカル🖥
○ GitHub ・・・ Gitを便利に使うためのツール
<リポジトリの作成>
①Github +ボタン→New repository
②リポジトリの名前を入力
③アクセス権 public・・・全世界にリポジトリの中身が見られる
private・・・限られた人だけ
④creare repositoryボタン
このリポジトリを使って作業を進めていくために、リモートからローカルの端末上にこのリポジトリをコピー
★git status → 現在の状態を確認するコマンド
★git add ファイル名→Gitに管理された状態にする(gitの管理下に入るとファイル名が緑に)
※gitで管理するしないをgit addで選択することができる
○ステージング・・・ファイルがGitの管理下にある状態(git statusで緑色の状態)
★git add . → 全てのファイルをステージング
★git commit→現在の状態をGitにセーブする
(git commit -m"" コミットメッセージ)
★modified:ファイル→ファイルを編集したことをgitが検知
★git log→gitのコミット履歴を確認できる
★git push→リモートにアップロードを行う
(git push origin)
★git pull→存在するリポジトリを最新のものにダウンロード
(git pull origin)
★git clone→新規にリポジトリをローカル側にコピー
○ブランチ・・・gitの変更履歴を枝分かれさせる機能
master(元祖変更履歴)●→●→●→→→→→
●→→↗️合流
ブランチ(枝分かれ)
⇩
なぜ必要か
<ローカル> ベテランAさん → ベテランBさん
↘️ ↙️
リモート
Aさん「この機能を作って!」
リモートにあるシステムは既に本番稼働している大事なシステム・・・
↓
新人Bさんの作ったもしかしたらバグってる修正をそのままリモートにプッシュされてしまったら本番が崩れてしまうかも・・・
↓ そういう時に
master側の歴史とは別の歴史とは別の歴史を枝分かれさせてブランチで開発する。
※ブランチ・・・masterにマージするまでmaster側には影響を与えない。
★git checkout→ブランチを切り替えるコマンド
<git checkout -b develop master>
★git branch→ブランチの一覧を見るコマンド
緑色が現在のブランチ
★git checkout master→master側に戻る
★git merge→ブランチを合流させること
【マージ作業】
①マージ先のブランチに移動
②git merge develop
○プルリクエスト・・・git hub
開発をおこなったBさんからAさんに対してこの
ブランチをmasterにマージして下さいという依頼
【AさんBさんが同じブランチで作業する場合】
□よくあるエラー
reject fetch first(先にフェッチしてね)
※リモートの状態をローカルにダウンロードすること
先にAさんがpush →リモートサーバーとしてはAさんの作った歴史が
由緒正しく正当な歴史と認識
⬇️
そこに対して、Bさんの作った別の歴史をプッシュ
しようとしたので、リモートサーバーとしては正統な
歴史と違うので却下!
☟どうすればいいか
リモートから最新の情報を取ってきて自分の手元にマージ
を行う
☆-a →リモート側も含めた全てのブランチを表示する
VIエディタで保存する場合は → :wp
◆ fetch と pull の違い
git fetch origin(リモートから最新の情報をダウンロード)
git merge origin / develop
origin / develop を手元のdevelopにマージ
⬇️ 一発で同じことができる
git pull develop
⬇️ また別のやり方
rebase
git fetch origin
git rebase origin / develop develop
git push origin -f
☆-f →リモートを無視(ローカルを正)として強引にプッシ
◆mergeとrebase の違い
<mergeコミットツリー>
Aさん ●→●→●→→→●→→→→→→
Bさん ↘️→→→→→○→→→○↗️
入り乱れて最終的に合流する
<rebaseコミットツリー>
Aさん● Bさん○
●→●→●→→→●→→→○→→→○→→→
Aさんの後にBさんが作業始めましたよというように歴史を改ざんできる
一直線のコミットツリー
○コンフリクト・・・複数人が同じブランチの同じファイルの同じ行に
対して変更を行うと発生する問題
<<<<<<HEAD
nfsjflksfsjgs編集
===========
fileの編集
>>>>>>>17hjsnvlkxkvnjshiouu34892u52jkn
Aさんの変更です
↓エラーの解消
①ギザギザを消す
②自分の編集も消す
③Aさんの変更に対して、自分の行った編集を加える
④git status
↓
fix conflicts and run git commit(コンフリクトを解消するためにgitコミットしてね)
⑤git commit -m""
★git reset
<git reset --hard HEAD(今の編集を全て消して最終コミットの時点まで戻る)>
★git stash
<git stash→一時保管>
<git stash pop →戻す>