gitの曖昧だった知識をまとめる(Rails 総復習1ヶ月チャレンジ 12日目番外編 )

はい!またしても更新が空いてしまいました・・・。
今日は現在携わらせていただいているチーム開発中にgithubの操作で躓いてしまったのであやふやだった知識をまとめます!
個人開発だと全然意識しなくて使っていたコマンドもチーム開発だと使い分けをしないと後々困ることが多いのでしっかり覚えたいと思います・・・!

git fetch, git merge, git pull

共同開発をしていてこのような状況になった場合、どのようにすれば良いか?

Q,他の開発者が新しくブランチを作ってGitHubにプッシュ。そのブランチをまるっと自身のローカルにも持ってきて動作確認したい。

A.ローカルに無いリモートブランチをローカルに持ってきて、そのブランチに切り替える手順は下記。

git fetch
git checkout 対象の新規ブランチ名

詳細解説
git fetchではリモートブランチの情報をローカルの追跡ブランチとして取得・反映するコマンドです。 その後git checkout fooとすることでgit fetchで取ってきたブランチに切り替えることが出来ます。正しいリモートブランチの情報でローカルブランチが作成できたかどうかは、git logコマンドでコミット履歴を見ることなどで確認することができます。

ちなみに自分の中でgit merge、git pullをとの違い、使い分けがあやふやとなっているところがありますので併せて記載します。

  • git pull
 git pull origin リモートブランチ名 

現在のブランチにリモートブランチを取り込む。

  • git merge
git merge ブランチ名  

別のブランチのコミットの変更内容を、現在のブランチに取り込む。

git reset

commitを戻したい場合に使用されます。自分はかつて間違ってreset hardをしてワークツリーごと内容を消してしまったことがあるので注意です。

  • git reset --soft
# コミットコードを指定
git reset --soft 取り消しするコミットコード
 
# 直前のコミットを取り消しする場合
git reset --soft HEAD^

commitのみを取り消します。 commitのみを取り消すので、取り消されたcommitの内容はインデックスに登録された状態、つまりgit add実行後の状態に戻るので新たにcommitを作ることができます。

  • git reset --hard
# コミットコードを指定
git reset --hard 取り消しするコミットコード
 
# 直前のコミットを取り消しする場合
git reset --hard HEAD

commitとaddを取り消して、かつワークツリーの内容も消されます。

  • git reset --mixed
git reset --mixed HEAD

git reset --mixedではaddとcommitを取り消し、取り消された内容はワークツリーに置かれた状態になります。git add する前に戻るということですね。
なおgit resetとgit reset --mixedは同じ挙動をします。

参考: 【Git入門】resetでコミットを取り消す方法を解説! | 侍エンジニアブログ

今回は以上です!
次回はgit flowについてやっていけたらなと思います。