Git の基本操作
適当に書いたので、違ったらすみません。
git の初期操作
git の開始
- git init : 新規のフォルダで開始する場合
- git clone : すでにあるリポジトリからファイルをコピーしてきて開始する場合
git でファイルをリモートリポジトリに入れるまで
- git add .
- git commit
- git push origin master
- master を origin に push するという意味
- origin がリモート名
- master がブランチ名
push
- git push <リモート名> <ブランチ名>
- よく使うもの : git push origin master
- -u を付けると次回から git push だけでよくなる
- git push -u origin master
ローカルディレクトリでの操作
ファイルを消したい/ファイル名を変えたい
- git rm <file> :ファイル削除
- git rm -r <dir> :ディレクトリの削除
- git mv <old_name> <new_name> :ファイル名の変更
元に戻したい
- ステージをきれいにしたい(どちらも同じ? stage から消える)
- git reset HEAD .
- git restore –stage .
- stage に戻したい
- git restore <file>
- コミットしたものに戻したい(作成したファイルは残っている)
- git checkout — .
- 完全に特定の commit に戻したい
- git log で戻したい commit のハッシュ値を探す
- git reset –hard <hash>
リモートの操作
追加・削除・名前の変更
- 追加:git remote add origin https://github.com/<username>/<リポジトリ>
- origin は慣習的に使われる名称
- 削除:git remote rm <リモート名>
- 名前の変更:git rename <old_name> <new_name>
- 確認
- git remote
- git remote -v
- git remote show <リモート名>
- git remote origin
fetch ・ merge ・ pull
fetch と merge
- git fetch <リモート名>
- git fetch origin
- remotes/<リモート名>/<ブランチ名> で保存される
- git merge
- ワークディレクトリに反映される
手順
- ワークディレクトリの切り替え
- git checkout remotes/origin/master
- ワークディレクトリを元に戻す
- git checkout master
- ローカルディレクトリに反映
- git merge origin/master
- リモートの master ブランチをローカルのmasterブランチにマージしている
pull
- git pull <リモート名> <ブランチ名>
- git pull origin master
- git pull だけでも良い
- 以下2つを実行したのと同じ意味
- git fetch origin/master
- git merge orign master
- 現在のブランチにマージするので、ブランチに注意
ブランチ
基本操作
- ブランチの作成:git branch <ブランチ名>
- git branch new_branch
- ブランチ一覧
- git branch
- git branch -a
- ※ リモートも表示する
- git log –oneline –decorate
- ブランチの切り替え
- git checkout <ブランチ名>
- ブランチを作成して、そのブランチに切り替える
- git checkout -b <ブランチ名>
- ブランチ名の変更
- git branch -m <new_name>
- ブランチの削除
- git branch -d <branch_name>
- ブランチの強制削除
- git branch -D <branch_name>
変更削除の例
- git checkout old_banch
- git brach -m new_branch
- git checkput master
- git branch -d new_branch
マージ
基本操作
- git merge <ブランチ名>
- git merge <リモート名/ブランチ名>
- マージには 3 つのパターンがある
- Fast Forward
- 早送りになるマージ
- 枝分かれしなかったときのマージで、ポインタを進めるだけ
- マージのコミットファイルは、1つの親コミットへのポインタを持っている
- Auto Merge
- 基本的なマージ
- 新しいコミットファイルが作成される
- マージのコミットファイルは、2つの親コミットへのポインタを持っている
- Conflict
- 競合が起こっており、自動では解決できなかった
- Fast Forward
コンフリクトの解決
- ファイルの内容を書き換える
- <<<<<<<< ======== >>>>>>>> の行を取り除く
- 手順
- git checkout master
- git merge new_branch でコンフリクト発生
- git status でコンフリクトを確認する
- コンフリクトが起こっているファイルを編集(最終形にする)
- git add <filename>
- git commit
GitHub
手順
- master ブランチを最新に更新
- git checkout master
- git pull origin master
- ブランチを作成
- git checkout -b new_branch
- ファイルを変更
- コミット
- git add .
- git commit -m “commit message を書く"
- プッシュ
- git push origin new_branch
- プルリクエストを送る
- ブラウザからプルリクエストを作成する
- base: master
- compare: new_banch
- レビューを依頼
- ブラウザからプルリクエストを作成する
- コードをレビュー
- プルリクエストをマージ
- 確認が終わったら merge ボタンを押す
- squash and merge だと途中のコミットをまとめることができる
- ブランチの削除
- ブラウザのプルリクエストの画面から Delete branch を実行
タグ
タグの表示
- タグ一覧(アルファベット順に表示される)
- git tag
- git tag -l “パターン"
- 特定タグの詳細表示
- git show <タグ名>
- タグを作成した人、日時、注釈、コミット情報などが表示される
タグの作成
- タグの作成
- git tag <タグ名>
- git tag -a <タグ名> -m “メッセージ"
- タグをリモートリポジトリに反映する
- git push <リモート名> <タグ名>
- git push origin v1.0.0
- タグを一斉にリモートリポジトリに反映する
- git push –tags
stash
- 作業の一時避難
- git stash
- stash の確認
- git stash list
- stash の復元
- git stash apply
- ※ stage が復元されない
- git stash apply –index
- ※ stage も復元する
- git stash apply <stash名>
- 特定のshash の復元
- git stash apply
- stash の削除
- 最新のstash を削除
- git stash drop
- 特定の stash の削除
- git stash drop <stash 名>
- stash 全部を削除
- git stash clear
- 最新のstash を削除
リベース
※ git push したものは、履歴が壊れるのでリベースしてはならない。間違えてリベースすると push ができなくなるため、手作業でリモートとローカルのコミット状態をそろえる必要がある。実質やり直し。
マージとの違いは、履歴が直線になるため履歴がすっきりする。ただし、マージの方がコンフリクトの解消が楽である(コンフリクトは1回しか発生しない)。
リベースでコンフリクトが発生すると、各コミット毎にコンフリクトを解消する必要がある。
push していない状態でローカルを最新化するときはリベースが良い?間違えると危なそうだから使わない?
手順
- new_branch をmaster に取り込む
- git checkout new_branch
- git rebase master
- master をリベースしたところまで進める
- git checkout master
- git merge new_branch
- push して new_branchを削除する
- git push origin master
- git branch -d new_branch
リベースで履歴を書き換える
※ push した場合は、これはやったらダメ。
- git rebase -i HEAD~5
- -i は –interactive の略。対話リベースでモード
- ~ は HEADをいくつ遡るか指定する
- エディタ上で pick を edit に書き換える
- pick だとそのまま commit を適用していく
- ここでコメントを編集しない
- git commit –amend
- ここでコメントを編集する
- git rebase –continue
リベースで色々やる
- コミットの削除
- git rebase -i HEAD~3
- エディタ上でコミットの行を消す
- git rebase –continue
- コミットの順番を変更する
- git rebase -i HEAD~3
- エディタ上でコミットの行を入れ替える
- git rebase –continue
- コミットをまとめる
- git rebase -i HEAD~3
- エディタ上 pick を squash に書き換える
- git rebase –continue
- コミットを分割する
- git rebase -i HEAD~3
- エディタ上 で、分割したいコミットの pick を edit に書き換える
- git reset HEAD^
- edit まで戻し、stage していない状態にする
- file1 を修正
- git add file1
- git commit -m “modify file1"
- file2 を修正
- git add file2
- git commit -m “modifyfile2"
- git rebase –continue
その他
ローカルブランチをきれいにしてやり直す
- git branch -D master
- git fetch
- git branch master origin/master
- git merge origin/master
ローカルブランチに反映し、不要になったブランチを削除
- git checkout master
- git pull origin master
- git branch -d pull_request_branch