LoginSignup
1
1

More than 3 years have passed since last update.

Udemy もう怖くないGit!チーム開発で必要なGitを完全マスター (プルリクエスト・リベース・タグ・一時避難 編)

Posted at

引用先
Udemy もう怖くないGit!チーム開発で必要なGitを完全マスター
このコースではGitの裏側でどのような挙動でGitが動いているのかを図で詳しく解説しているので深く知りたい方は受講してみることをおすすめします。

プルリクエストとは

プルリクエストとは、自分の変更したコードをリポジトリの取り込んでもらえるよう依頼する機能。
バグを発生させないためにコードを他の人にレビューしてもらうためにプルリクエストがある。

プルリクエストの手順

① masterブランチを最新に更新
② ブランチを作成
③ ファイルを変更
④ 変更をコミット
⑤ GitHubへプッシュ
⑥ プルリクエストを送る
⑦ コードレビュー
⑧ プルリクエストをマージ

GitHub Flow

GitHub Flowとは、GitHub社のワークフロー。
masterからブランチしてプルリクエストをしマージするといった基本的な流れのこと。

GitHub Flowのポイント

・masterブランチは常にデプロイできる状態に保っておく
・新開発はmasterブランチから新しいブランチを作成してスタート
・作成した新しいブランチ上で作業しコミットする
・定期的にpushする
・masterにマージするためにプルリクエストを行う
・必ずレビューを受ける
・masterブランチにマージしたらすぐにデプロイする
 ←テストとデプロイ作業は自動化

リベース

変更を統合する際に、履歴をきれいに整えるために使うのがリベース。

git rebase <ブランチ名>

ブランチの基点(親コミット)となるコミットを別のコミットに移動する。

リベースとマージの違い

リベース:履歴が一直線
マージ:履歴が枝分かれ

リベースでしてはいけないこと

GitHubにプッシュしたコミットをリベースするのはNG

GitHubにプッシュしたコミットをリベースすると、、
GitHub上とローカルリポジトリとの親コミットが変わりプッシュできなくなる。

マージとリベースのメリット、デメリット

  マージ リベース
メリット コンフリクトの解決が比較的簡単 履歴を綺麗に保つことができる
デメリット マージコミットがたくさんあると履歴が複雑化する コンフリクトの解決が若干面倒

マージとリベースのコンフリクトの違い

マージはコンフリクトが一回しか発生しない。
リベースはコンフリクトが各コミットごとに発生する。

プルのマージ型

git pull <リモート名><ブランチ名>

マージコミットが残るので、マージしたという記録を残したいときに使う。

プルのリベース型

git pull --rebase <リモート名><ブランチ名>

マージコミットが残らないので、GitHubの内容を所得したいときにrebaseを使う。
何も変更していない時に使う。

リベースで履歴を書き換える

git rebase -i <コミットID>

-iは --interactiveの略。
対話的リベースといって、やり取りしながら履歴を変更していく。

①複数のコミットをやり直す

git rebase -i HEAD~3
↓
pick <コミットID> <コミットメッセージ>
pick <コミットID> <コミットメッセージ>
pick <コミットID> <コミットメッセージ>

↓ # やり直したいコミットをeditにする (pick → edit)
edit <コミットID> <コミットメッセージ>
pick <コミットID> <コミットメッセージ>
pick <コミットID> <コミットメッセージ>

↓ # やり直したら実行する
git commit --amend

↓ # 次のコミットへ進む(リベース完了)
git rebase --continue

「HEAD~」とは

HEADは今いるコミット。
HEAD~3は3つ前の親コミットまで遡る。

②コミットを並び替える、削除する

git rebase -i HEAD~3
↓
pick <コミットID> <コミットメッセージ>
pick <コミットID> <コミットメッセージ>
pick <コミットID> <コミットメッセージ>

↓  # 削除の場合    :一行消す 
   # 並び替えの場合 :行を入れ替える
pick <コミットID> <コミットメッセージ>
pick <コミットID> <コミットメッセージ>

削除は一行消す、並び替えの場合は行を入れ替えるだけでできる

③コミットをまとめる

git rebase -i HEAD~3
↓
pick <コミットID> <コミットメッセージ>
pick <コミットID> <コミットメッセージ>
pick <コミットID> <コミットメッセージ>

↓  
pick <コミットID> <コミットメッセージ>
squash <コミットID> <コミットメッセージ>
squash <コミットID> <コミットメッセージ>

squashを指定するとそのコミットを直前のコミットと一つにする。

コミットにタグをつける

タグをつけておくとコミットを参照しやすくするためにタグをつける。
リリースポイントによくつける。

タグ一覧を表示する

git tag

アルファベット順にタグを表示する。

タグを作成する

タグには2種類ある
注釈付き版 : annotated
軽量版 : lightweight

注釈付き版を作成する

git tag -a <タグ名> -m "<メッセージ>"

-aオプションを付けると注釈付きタグを作成。
-mオプションを付けるとエディタを立ち上げずにメッセージを入力できる。

軽量版を作成する

git tag <タグ名>

タグのデータを表示する

git show <タグ名>

タグをリモートリポジトリに送信する

git push <リモート名><タグ名>

# タグを一斉に送信する
git push origin --tags

作業を一時避難する

コミットしたくないけど別ブランチで作業しないといけないときに一時避難する。

git stash
git stash save

saveは省略可能。

避難した作業を確認する

git stash list

避難した作業を復元する

# 最新の作業を復元する
git stash apply

# ステージの状況も復元する
git stash apply --index

# 特定の作業を復元する
git stash apply <スタッシュ名>

避難した作業を削除する

# 最新の作業を削除する
git stash drop

# 特定の作業を削除する
git stash drop <スタッシュ名>

# 全作業を削除する
git stash clear
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1