ローカルリポの作成方法
ディレクトリをローカルリポとして新規作成する
git init prj_nameカレントディレクトリに,prj_nameディレクトリが作成される.prj_nameディレクトリに.gitディレクトリが入っている.
これを作成した時点では,まだコミットは作成されない.
既存ディレクトリをローカルリポにする
ローカルリポにしたいディレクトリにて,以下を実行する.
git initこれを作成した時点では,まだコミットは作成されない.
その後,remoteリポを追加する.
git remote add origin http/or/ssh.gitもし,remote origin already existsの場合は,既存のremoteを削除する.
git remote rm originその後ローカルでpullする
git pull origin mainリモートリポからローカルリポを作成する
git clone http/or/ssh.gitなお、ほかの人のリモートリポをクローンする場合、それをフォークしてからの方がよい。
ローカルに紐づいたリモートリポの確認
git remote -vfetch先,push先のurlを確認できる.
基本操作
ブランチの一覧,現在のブランチを確認する
git branch 現在のブランチに*マークがついている.
バージョン,セルによっては,pagerが開く(画面一杯にブランチが開く)場合がある.
これを無効にするには次のようにやる.
git config --global --replace-all core.pager "less -F -X"ブランチを切る(ワーキングブランチはそのまま)
git branch hoge-branchブランチを切る(ワーキングブランチも切り替える)
git checkout -b hoge-branchワーキングブランチを切り替える
git checkout hoge-branch作業状態を確認する
git statusステージに上げる
git add hoge.txt
git add .
git add -A hoge.txtファイルの削除を反映するには,-Aオプションが必要.
コミットする
git commit -m "hoge"コミット履歴を見る
git logGitHubでリポジトリを作成した時点で,Initial commitが作成される.
全ブランチの最新コミットがわかる.
originはリモートリポのこと.
HEADは今のブランチみたいなもの.
プルする
ローカル→リモートへ更新する前に,リモートで更新されている分をローカルに反映させる.
git pull remote branch
git pull origin main今のワーキングブランチに反映される.
remoteは,リモートリポのこと.git remote -v で出力されるものを指定すれば良い.大体originのはず.
branchは,リモートリポのブランチのこと.大体mainのはず.
プッシュする
git push remote branchremoteは,リモートリポのこと.大体originのはず.
branchは,ローカルのブランチ名を指定する.これと同名のリモートにあるブランチにpushされる.
リモートリポでマージする
基本的にマージはプルリクエストを送って,差分を確認したのちにマージする.
1: プルリクエストを送る
GItHubのページにあるPull requestタブから,New pull requestをクリック.
マージ元→マージ先を選択して,差分を確認して,Create pull requestをクリック.
Titleを入力し,(commentも入力し,)Create pull requestをクリック.
2: マージする
プルリクエストがあると,GitHubのPull requestsタブにその数が表示されているはず.
Pull requestsタブから,マージするプルリクエスト(の名前のところ)をクリックする.
さらにFile changeタブから,差分を確認する.
Conversationタブから,Merge pull requestをクリックする.
リモートのmainにマージ後にローカルでプルする
ローカルのmainブランチに反映させたいので,mainに切り替えてからプルする.
git checkout main
git pull origin mainブランチの削除
1: ローカルリポのブランチの削除
git branch -d branchなお,mainにマージしていないブランチは削除できない?(できた?)
強制削除の場合は,-d → -D とする.
2: リモートリポのブランチ削除
GitHubのCodeタブから,branchesをクリック.
そこからブランチをゴミ箱マークで削除する.
管理
追跡中のファイル
git ls-files追跡してないファイル
git clean -n追跡してないファイルを削除する
git clean -f追跡しないファイルを指定する
.gitignoreファイルに記載する.
サイズが大きいもの.
パスワード等のもの.
システムが生成するキャッシュファイルなど.
公式がignoreするファイルを言語ごとまとめてる.
https://github.com/github/gitignore
記述の仕方
ワイルドカード:*.txt
ディレクトリ:hoge/
ファイル:hoge.txt
追跡をやめる
git rm --cached hoge_fileステージから下ろす
git reset HEAD file_nameHEAD: 今いるブランチを指す.
実際は,リポジトリにある内容を,ステージに上書きしている.
編集を破棄する
git checkout -- file_name--:以降はファイルを示す.
コミット時点まで戻されるので注意.
実際は,ステージにある内容を,ワーキングディレクトリに上書きしている.
ファイル名を変更する
git mv ho.txt ge.txtファイル名変更の情報がステージに上がる.
なお,gitを介さずにディレクトリ名を変更すると,削除+追加の処理になる.
削除+追加を同時にステージに上げると,ファイル名変更の情報になる.
ファイルを削除する
git rm hoge.txt追跡してないファイルは削除できない.
ステージ上のファイルは削除できない.
gitを介さずにファイルを削除すると,次のように-Aオプションをつけて 削除の情報をステージに上げる必要がある.
git add -A rmoved.txt履歴を表示する
一覧で表示する
git log線で結ぶ
git log --graph1行で表示する
git log --oneline特定のファイルの履歴を表示する
git log -- hoge.txt
git log --follow hoge.txtファイル名変更前も辿るには,--follow をつける.
特定のコミットの詳細を表示する
git show commit_idcommit_id: コミットID.すべての文字列でなくて,先頭の一部でも良い.一意となれば良い?
他のブランチの情報も表示する
git log --allブランチ詳細
ブランチは,コミットのポインタ.
そのコミットに親コミットの情報が入っているので,コミットの一連のように見える.
ブランチ一覧表示
git branch
git branch -aリモートリポのブランチを表示するには,-aをつける.
ブランチ名変更
git branch -m before_branch after_branchブランチ削除
git branch -d branch_nameコミット
最新のコミットのメッセージ修正
git commit --amend -m "<re_masseage>"前のコミットに戻す
前のコミットを消すコミットを作る: Revert
git revert <commitID>
git revert HEADリモートリポでrevertすることも可能
前のコミットを削除する: Reset
git reset <commitID>Revert推奨.機密情報等,履歴に残したくない場合のみ使用.
削除するコミットを元に開発が進められていると汗.
1.resetすることで,HEADが指定したcommitIDを指すようになる.
--soft
指定したコミット以降のreset時の変更とかはそのまま残る.
2.さらに,HEADが指定してたコミットの内容をステージに移動(デフォ)
--mixed
reset時にステージにあったものは,作業ディレクトリにコピー.
ただし,作業ディレクトリに変更ある場合は最新の変更が残る.
3.さらに,作業ディレクトリにもステージのものをコピー.
--hard
指定したコミット以降の変更等は全て消えるので注意.
マージ詳細
別のブランチをカレントブランチにマージする
git merge other_branchマージの種類
早送りマージ(fast-forward)
ブランチAからブランチBを分岐させて、ブランチBを変更する。
ブランチAの変更がなくて、ブランチB→ブランチAにマージするとき、ブランチAの指すコミットを移動するだけでマージできる。
これを早送りマージ、fast-forwardマージという。
なお、別でマージコミットを作成するnon fast-forwardマージにすることもオプションにより可能(説明略)。
自動マージ(automatic)
ブランチA、ブランチBに共通の変更がないときは、別のマージコミットが作成される。
コンフリクト(conflict)
ブランチA、ブランチBに共通の変更がある場合、マージされない。何らかの処理が必要になる。
マージできなかったものは、git statusのUnmerged pathsに追加される。
このあと、コンフリクトを解消して、コミットをする。
p4merge(diffのと同じ)等のソフトがある.
設定は略.
Rebase
分岐してる場合,一方を他方の後ろにつけて(新コミットIDが振られる)ブランチを一本化し,他方を削除.
→マージしやすくする.ゆくゆくのマージ先であるmasterを,branchにrebaseして,branchをmasterにマージしやすくする.
(branchにいる状態で) git rebase master
コンフリクトの場合,エラーが出る.コンフリクトを直したのち,
git rebase --continue(コンフリクトならマージすればいいと思う)
削除するため,リモートリポでそれを使われていたら最悪.
→push済みはrebaseするな.自分のローカルのやつのみにしとく.
pullする際のmergeをrebaseにすることも可能.
commitが綺麗になるくらい.個人でならいらないかも.
Stash
Workingディレクトリ,ステージにあるものを一度とっておく.
stashに移す
git stashメッセージつける場合
git stash save "<message>"untrackのファイルも移す場合
git stash -uuntrack, gitignoreしているファイルも移す場合
git status -astashの内容確認
git stash list
特定のstashの内容確認
git stash show stash@{<N>}git stash listで,インデックスが参照できる.
untrackは内容見れない.
stashを元に戻す
最新のもの
git stash pop以下の戻すと削除の組み合わせ
特定のもの
git stash apply stash@{<N>}stashからコピー
git stash applystashからコピーされるだけなので,stashには残ってる.
stashしたファイルを変更すると,コンフリクトが生じる.
stashを一つ削除
git stash drop特定のstashのみ
git stash drop@{<N>}別の人のリモートリポを自分のリモートリポにコピーする(フォーク)
相手のGitHubにあるFolkボタンをクリックする.
ローカルにクローンするときは,この自分のリモートリポにフォークしたものをクローンする.
コミットにtag
tag使い方
ドキュメント
idだとわかりづらい.
タグごとでソースファイルをインストールしたりも可能になる.
注釈付きタグと軽量版タグの2種類.
基本は注釈付きみたい.
最新のコミットにタグ付
軽量版
git tag <tagname>注釈付き
git -a tag <tagname>過去のコミットにタグ付
軽量版
git tag <tagname> <commitID>注釈付き
git -a tag <tagname> <commitID>上書きは不可.-fで強制.
tagを別のコミットに付け直す
git tag -a -f <re-tag>-aは注釈付き.
-fは強制.
同じ名前のタグはつけられない.d
タグ削除
git tag --delete <tagname>
git tag -dタグをpushする
git pushしてもタグ情報はpushされない.
git push <remote_ref> <tagname>
git push origin v1.0全てのタグをpushする
git push <remote_ref> --tagspushしたタグを削除(非公開)
git push <remote_ref> :<tagname>タグの状態をfetch
git fetch --tags --allタグ一覧
git tag --list
git tag -l
git tag -l "v1.8.5*"ソートとかもできるみたい.
diff
git diff <前tagname> <後tagname>何かソフト入ってる場合
git difftool <前tagname> <後tagname>あるタグのブランチを作る
git checkout -b <branchname> <tagname>あるタグと同じ状態にする
git checkout tags/<tagname>Github flow: 開発のワークフロー
git-flowというモデルを簡略化したもの
- mainブランチは常にデプロイ可能に.
- featureブランチは常にmainから派生
ローカルでマージはあんまりしない
README.md
そのプロジェクトが行うこと.
なぜこれを使うべきなのか.
どうやって使うのか,インストールなど.
詳細情報はどこで得られるのか.
誰が作って管理してるのか.
chromeのエクステンション
ファイルのツリー構造を見やすく.
Octotree
リモートリポのみ
issueをカンバン(アジャイル開発)として管理
ZenHub