新卒一年目の自分がよく悩むgitの使い方①
参考にさせていただいたサイト:Learn Git Branching 日本語版
事前情報
ブランチ・・・コミットを指す
HEAD・・・通常作業しているブランチを指す、コミットを直接指すこともできる
*・・・HEADのこと、ブランチを指す際に省略形として、"ブランチ*"と書かれる
main・・・ローカルブランチ、いつも作業してるところ
👉厳密にはHEADが指してるところが作業するところ
origin/main・・・追跡ブランチ
(remote)main・・・GitHubにあるmainブランチ
ローカル
$ git init
# .gitフォルダを作成し、今いるディレクトリをリポジトリと認識する(リポジトリの新規作成)
# または既存のリポジトリを初期化する
$ git status
# リポジトリの状態を表示
# 今いるローカルブランチ、追跡ブランチと新しく追加されたファイル、変更したファイル、ステージングしたファイルがわかる
$ git status -s
# 短縮したstatusがみれる
# M_ == ステージングしたファイル
# _M == 変更したファイル
# ?? == 新しく追加されたファイル
$ git log
# コミット履歴が見れる
$ git add ファイル指定
# ステージングする(ファイルをコミットの対象にする)
$ git commit -m "コミット名"
# 変更をリポジトリに記録する
上記流れを宇宙飛行士に例えてみた
まずgit initで下記の世界を作る
$ git branch ブランチ名
# ブランチを作成
# オプションで削除、一覧表示などもできる
developmentブランチを作成
$ git checkout ブランチ名
# 異なるブランチに切り替える
mainブランチでコミット
developmentブランチに切り替え、コミット
$ git merge ブランチ名
# 他のブランチやコミットの内容を現在のブランチに取り込む
mainブランチでdevelopmentブランチをmerge
コミットが生成され、それぞぞれのブランチがみているコミットの内容が反映される
developmentブランチにチェックアウトし、mainブランチをmerge
$ git rebase ブランチ名
# コミットを再適用する
mainブランチでdevelopmentをリベースする
developmentブランチにチェックアウトmainをリベースする
$ git reset オプション コミット名
# 今いるブランチを特定のコミットの状態まで戻す
# オプションは3種類
# --soft・・・特定のコミットの状態まで戻し、変更をステージングに移動する
# --mixed・・・特定のコミットの状態まで戻し、変更を作業ディレクトリに移動する
# --hard・・・特定のコミットの状態まで戻し、変更をなかったことにする(変更破棄)
developmentブランチをC1までresetする
リモート
GitHubにてリポジトリは作成済みとして考える
リモートのブランチ名とローカルのブランチ名は対になっている
$ git remote add origin 追加したいリモートリポジトリ(https://github.com/~~~~)
# リモートリポジトリのアクセス先がoriginと言う名前でローカルに設定される
# originという名前(識別子)でリモートリポジトリを指している
# originはローカルの追跡ブランチと呼ばれるもの
- origin/main・・・追跡ブランチの名前(この場合リモートリポジトリのmainを追跡してる)
- origin main・・・追跡ブランチが指してるリモートのブランチのこと
mainブランチでgit remote add origin 追加したいリモートリポジトリ(https://github.com/~~~~)
$ git push origin ローカルブランチ
# ローカルブランチの変更内容(commit)をリモートブランチに送信する
# 引数を省略することもできるが、しない方が吉
前提
mainブランチでコミット
mainブランチでpushする
👉pushは2段階の処理をしている
1. ローカルリポジトリの変更をリモートリポジトリへ送信
2. mainブランチでorigin/mainをmerge(コミットを新しく生成するわけではないので厳密にはmergeと同じではない)
$ git clone github~~~~~
# リモートリポジトリのクローンを作成する
# initとfetchをしてくれ、デフォルトに設定しているブランチに関してはmergeまでしてくれる
前提
作業ディレクトリでリモートリポジトリをclone
$ git fetch origin リモートブランチ
# リモートリポジトリのブランチ内容を追跡ブランチに反映させる
# 引数を指定しなければ全てのブランチをfetchすることになる👉基本これを使う
前提
mainブランチでfetchを実行
mainブランチでorigin/mainをmerge
👉git pullと同じになる
$ git pull
# fetch+merge
# 上記のfetchからのmergeが一気に行える
# fetchの状態で止まらない
Discussion