ベスパリブ

ベスパもってないです。バイク買いました。

私のGitの定形フロー

Gitに慣れ、だいたい以下の流れが定形になったので、備忘録として残します。

1. featureブランチの作成

機能Aを追加することになったので、developブランチから機能Aを実装する用のブランチ(feat/task-A)を作り、そこで機能Aを実装します。

# ローカルのdevelopブランチを最新の状態にする(リモートのdevelopブランチの状態にする)
$ git checkout develop  # developブランチへ移動する
$ git fetch  # リモートの情報を、リモート追跡ブランチに取ってくる
$ git merge origin/develop  # リモート追跡ブランチをマージする

# developブランチからfeat/task-Aブランチを作成する
$ git checkout develop
$ git checkout -b feat/task-A  # feat/task-Aブランチを作成し、移動する

2. 機能Aの実装中

機能Aを実装中、適当にきりのいい作業単位でコミットする

$ git add .             # ファイルをすべてインデックスに追加する
$ git status           # addしたファイルの確認
$ git reset piyo.txt    # インデックスから除外したいファイルがある場合はresetコマンドを使う(piyo.txtが除外される)
$ git commit        # インデックスをコミットする

# エディタが開くので、コミットメッセージを入力する
# 保存をするとコミット完了。やっぱりコミットしたくないときは保存しないで終了する

# コミットログを見たいときは以下のようにします。
$ git log     # commitのログが見れる(qで終了)

機能Aが実装完了するまで、これを繰り返します。

3. 機能Aの実装完了

feat/task-Aブランチで機能Aを実装しました。忘れずコミットします。

# 機能Aを実装完了したので、きちんとコミットする
$ git add .
$ git commit

ローカルリポジトリのコミットを、リモートリポジトリにpushします。

# ローカルのfeat/task-Aブランチのコミットを、リモートのfeat/task-Aにpushする。
$ git checkout feat/task-A
$ git push origin feat/task-A

pushができたら、プルリクエストをします。プルリクエストをコマンドでやる方法はわからないので、GitHubだったらそのページに行ってぽちぽち適当にボタンをクリックします。

3-1. コンフリクトが発生したら

# 競合の解決方法例

# developブランチを最新の状態にする
$ git checkout develop
$ git fetch
$ git merge origin/develop

# developブランチをfeat/task-Aにマージする
$ git checkout feat/task-A
$ git merge develop

# 競合が発生した場合、競合を解決する必要がある
# 競合の解決は、基本的に手動でファイルを修正する
# 注意1. 自分の変更内容を必ずしも優先しない 
# 注意2. わからなければ誰かに相談する

# <<<<<<< HEAD
# 自分の環境の変更点
# =======
# マージを試みた他の環境での変更点
# >>>>>>> [commit id]

# ファイルを修正して競合を解決したら、通常通りにaddしてコミットします。
$ git add .
$ git commit -m "fix conflict"

# コミット出来たらfeat/task-Aをリモートへpushします。
$ git push origin feat/task-A

4. プルリクエストが承認されたら

ローカルのfeatureブランチはもう必要ないので削除します。

$ git checkout develop
$ git branch --delete feat/task-A  # feat/task-Aブランチの削除

その他

git branch --delete feat/task-A できないとき

ローカルのdevelopブランチにfeat/task-Aの内容がマージされてない場合、エラーが出る。なので、developブランチを最新の状態にしてやれば良い。

# developブランチを最新の状態にする
$ git checkout develop
$ git fetch
$ git merge origin/develop
# 消せるようになる
$ git branch --delete feat/task-A

git checkout [ブランチ] できないとき

ブランチを移動できないとき、大抵はコミットしてないのが原因です。コミットしたくない場合、stashで一時保存すればよい。