1
2

More than 3 years have passed since last update.

あなたはまだGitを使いこなせていない

Posted at

はじめに

私事ですが、最近エンジニアに転職しました
入社後、色々学んできた中で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}

で元に戻りましょう

以上です!!!
ここまで読んでいただきありがとうございました!!
疑問、気になるところがございましたら、質問、コメントよろしくお願いします!!!

1
2
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
2