#はじめに
私事ですが、最近エンジニアに転職しました
入社後、色々学んできた中でGitについて改めて便利やな〜と感じたので、
そのことについてまとめてみようと思います
まず、入社前の私の状態について軽く説明します。
Gitをバージョン管理というよりは、ソースコードのバックアップのために使っていました
本当にpushとpull以外では使っていませんでした笑
なので、Gitについて基本的な概念を大雑把に理解している感じです
具体的には
- GitとGitHubって別物なんや!!
- リポジトリはリモートとローカルがあるんか〜
- addしたら変更履歴がインデックスに上がるんか〜 などなど
こんな感じです笑
ですが、開発をしているとコンフリクトは起こるし、前のバージョンで確認したいことはあるしで、Gitを個人のバックアップ用に使っていると訳がわからないことになしました
そこでGoogle先生にはだいぶお世話になりました。
今回はそのときにGoogle大先生から教わったGitのことについてまとめようと思います。
#基本操作
まず、基本操作について説明します
大きな流れとしてはgit initからgit pushまでです
##ディレクトリをGitの監視下に置く
このコマンドでファイルの変更の監視を開始します
git init
##リモートリポジトリの追加
リモートリポジトリ(GitHubなど)を追加する
gitのプロトコル(通信方式)はLocal、HTTP、Secure Shell (SSH)、Gitがあるらしいです
今回はgitを使ったコマンドを例に記載しておきます
他のプロトコルについては他の記事をご参考ください。
git remote origin git@github.com:xxxxxx/xxxxx.git
##インデックスにファイルを追加する
ステージングと呼ばれる作業です。
インデックスにあるファイルがコミットの対象になります。
git add xxx.php
##コミット
インデックスにあるものをローカルリポジトリに反映させる
コミットメッセージが本当に大切だから意識して書くようにするといいと思います。
git commit -m "first commit"
##リモートリポジトリにローカルリポジトリを反映させる
リモートリポジトリoriginにローカルリポジトリbranch1を反映させます
git push origin branch1
以上がgit initからgit pushまでの一連の流れになります。
#チーム開発
次に、コンフリクトが起こった時の対処法について解説します。
コンフリクトとは同じファイルの同じ箇所を違う人が編集することがよく起こります
Gitがどちらの変更を反映させたらいいかわかりませんという状態です。
普段はGitがいい感じにやってくれるのですが、Gitでは判断出来ないものはコンフリクトとして報告してくれます
では、実際にコンフリクトが発生した時の対処法について解説します。
ソースコードの編集が終了し、pushしようとします。
git add
git commit -m "commit message"
git push
pushしようとするとコンフリクトが発生し、pushできません。
そうした時に変更された内容を吸収しないといけません。変更を吸収するためにpullします。
git pull
pullした後、コンフリクトが発生した箇所でこのような記述があります
この記述を参考に編集して再度pushします。
<<<<<<< HEAD
# 作業ブランチでの変更内容
=======
# hogebranchでの変更内容
>>>>>>>hogebranch
git push
するとリモートリポジトリに他の人の変更と自分の変更がいい感じにくっついて履歴として保存されます。
#ある時点のコミットした状態に戻る
Gitを使っているのであれば、あるコミットの時点に戻りたいということも可能です。
開発を進めていると原因がよくわからないバグが発生します。
その時にこのバグがいつからあったのかを調べないと原因の切り分けがしにくい時があります。
是非覚えておきたい手法です。
まず、あるコミットの時点にどういう名前で保存されているかを調べます
git reflog
// 実行結果
7ea6663 (HEAD -> master, origin/master, heroku/master) HEAD@{0}: commit: Update production.rb
16780b4 HEAD@{1}: pull --progress origin: Fast-forward
7843f1c HEAD@{2}: checkout: moving from pg-install to master
7863c5b HEAD@{3}: commit: add pg
上記のような結果が出てくると思います。
次に、戻るコマンドを叩きましょう
ここで注意ですが、戻ってしますとコミットしていない変更点は消えてしまいます
なので、消えて欲しくない変更はaddしてcommitしておきましょう
本題に戻ります。例えば、、、
HEAD@{3}に戻りたいときは以下のコマンドです
resetにはhard
,mixed
,soft
の3種類のオプションがあります
これらのオプションについてはまた興味がありましたら調べてみてください。
今回使用する--hardは簡単にいうと全部消えるので注意してください
git reset --hard HEAD@{3}
これでローカルのフォルダも変更されています。
慣れないうちはあまり触りすぎないことをオススメしますめんどくさいことになるので、、、
最後に、最新の状態に戻しましょう
やり方は同じです
reflog
でコミットのハッシュを確認しましょう
git reset --hard HEAD@{0}
で元に戻りましょう
以上です!!!
ここまで読んでいただきありがとうございました!!
疑問、気になるところがございましたら、質問、コメントよろしくお願いします!!!