RareTECH受講生ブログ

RareTECHの受講生がアウトプットに利用しているブログです。

【応用編】Gitコマンド入門

はじめに

RereTECH生徒のゆうぞうです。
今回はRareTECHで行われた「6/9(水) Gitの使い方応用編」の講義内容について説明します。

この記事を読むと以下の点がわかるようになります。

  • gitingnore
  • merge
  • conflict(コマンドではありませんが)
  • fork/pull request(merge request)
  • stash
  • rebase
  • revert[done]

また、Gitコマンドの入門編に関する記事も用意しています。
こちらの記事ではGitの基本的な概要とコマンドを掲載しているので、こちらの記事を読む前に是非一度読んでみてください。

blog.raretech.site

以上の記事内容を前提知識とした上で、今回は応用編について解説していきます。

.gitignoreとは

gitignoreとはgitで管理したくないファイルを作成することです。
gitにはリモートリポジトリに管理してほしくないファイルが存在します。
例えば、パスワードや認証についてのファイルが合った場合、リモートリポジトリの保存してしまうと他の人に見られてしまいます。
それはセキュリティ上よろしくありません。 その問題を解決するためにgitignoreファイルにリモートリポジトリに上げてほしくないファイルを記述しておくと、PUSHする際にそのファイルを保存してほしくないファイル名を書いて置くと保存されずに済むのです。

ignoreとは無視するという意味を表します。
したがって、.gitignoreはその名の通り、指定したファイルをcommitしないように無視します。

gitignore.io

gitignoreファイルを簡単に作成してくれます。 保存しないファイルを自動で作ってくれるのでとても便利です。

フレームワークはファイルが沢山ありますが、すべてのファイルを保存する必要はありませんので、使用してるフレームワークを入力するとgitignoreファイルを作成してくれます。



mergeとは

続いてはmergeです。
mergeは結合という意味を表します。

f:id:yuuzoublog:20210627065256j:plain

ブランチを切って結合するところまでやってみましょう。

コマンドを以下の通りです。

ローカルリポジトリで管理するディレクトリとファイルを作成

$ mkdir 任意の名前 (mkdir yuzo)
$ cd 先ほど作ったディレクトリ
$ touch test.txt 
$ echo hoge >> test.txt
$ echo huga  >> test.txt
$ echo aaaa >> test.txt
$ cat test.txt

ローカルリポジトリの作成

git init

インデックスに変更したファイルを追加

git add .

インデックスに追加された内容をコミット

git commit -m "first commit"

ローカルリポジトリの状態を確認

git status

ブランチ(分岐)を作成&カレントブランチ化

git checkout -b develop

作成したブランチでファイルの変更をコミット

echo bbbb >> test.txt 
git add . 
git commit -m "second commit"



fast-forward mergeと--no-ff オプション

f:id:yuuzoublog:20210627071410j:plain fast-forward mergeとは 分岐前に変更が行われなかった場合のmergeのことです。

画像にもありますがマスターとデベロップの2つブランチがあるとします。 デベロップのブランチにコミットをいくつか作った後、マスターにマージしたとします。

この時マスターに変更がなかった場合、画像の下のブランチと同じようになります。 デベロップをそのままマスターにしてしまえというのがfast-forward mergeということになります。 fast-forwardが「早送り」という意味なので結合は面倒なので飛ばしてやるぜという認識です(個人の感想)

ちなみにマスターに変更が無ければgitが変更が無いと指摘してくれます。すごいですねー。



--no-ff とは

f:id:yuuzoublog:20210627074203j:plain

no-fast-forwordということなのでfast-forwardをしないオプションということになります。 このオプションをつかうと必ずマスターに戻ってコミット履歴を戻すということになります。

なのでマスターブランチは残ることですね。

個人的な感想ですがマスターがあったほうがわかりやすいのかなと思いました。



fetchとは

f:id:yuuzoublog:20210627075947j:plain fetchとは remoteリポジトリから情報を取ってくるだけのコマンドになります。

基礎編で解説したpullですが、実は2つのコマンドが合わさったものなんですね。 pullはfetchとmergeが合わさったもの何だそうです。 ローカルリポジトリにマージまでやってくれるコマンドということですね。



conflictとは

f:id:yuuzoublog:20210627080556j:plain

コンフリクトとは衝突と意味です。

画像を例にして見てみましょう。 マスターブランチとデベロップブランチの2つがあります。 マスターブランチのファイルをaaaaからbaaaに変更 デベロップブランチのファイルをaaaaからcaaaに変更 その後にデベロップブランチをマージするとコンフリクトを起こします。

その理由は同じファイルで同じ箇所を変更しているのでgitはどちらのファイルを残しておくのかわからず、コンフリクトを起こすのです。 便利ですねー。

実際のファイルでは変更内容を記載してくれているのでどちらかを消してもう一度マージを行うとマージができるようです。



fork/pull request(merge request)とは

f:id:yuuzoublog:20210627082019j:plain

forkとは他人のリポジトリをコピーしてくるコマンドです。 自分のリポジトリに他人のリポジトリをコピーできるコマンドでgithabでのコマンドになります。

その逆はpull request(merge request)になります。 自分のリポジトリを相手のリポジトリにプッシュしたい時に使用します。相手側に自分のリポジトリをプッシュしたいのにpullってのはなんだか引っかかりますが、pull requestとなっていますのでお間違いなく。

ちなみにmerge requestはgitlabでのコマンドになります。



stashとは

f:id:yuuzoublog:20210627083210j:plain

stashとは隠し場所という意味ですが、gitに関しても同じような使い方をします。 gitの使い方としてコミットは区切りといい時にコミットします。理由としては機能ごとにコミットしたほうがわかりやすいからです。

stashの使い道は、 中途半端なので、コミットはしたくない。でもどうしても今までの変更内容を残したくない。 なのでその変更を保留しておいてくれるコマンドです。

私のイメージとしては「仮で作っておく」という感じですね。



rebaseとは

f:id:yuuzoublog:20210627084337j:plain f:id:yuuzoublog:20210627084818j:plain rebaseはコミットの場所を変更できるコマンドになります。 このコマンドは非推奨であまり使用しないそうです。

gitを使用する方でコミット履歴が下の画像のようになっていることを美しくないと思う人がいるようで、このコマンドを使用してきれいにするということをするそうですよ。

このコマンドについてやるべきではないということが書かれております。



revert[done]

f:id:yuuzoublog:20210627085906j:plain

revertはコミットを消すように見せかけるコマンドです。 例としては白い紙にRareTECHと書いた場合、その文字を見えなくしたい場合は白い文字でRareTECHと書けば見えなくなくなります。 削除すればいいと思うかもしれませんが、消したというコミット履歴を残すためにrevertを使用します。

削除してしまってはなぜ消したのかがわからないためこのコマンドがあるようです。

まとめ

エンジニアにとってgitは必須スキルと言われています。 現場に入ったら確実に使用するということなので今のうちに学習して身につけておきましょう。