📚

新卒一年目の自分がよく悩むgitの使い方①

2021/06/10に公開

新卒一年目の自分がよく悩む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の状態で止まらない
GitHubで編集を提案

Discussion