FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

新人エンジニアでも使えるようになった基本のGitコマンド

新卒1年目の大北です。

未経験で入社してから分からないことは多々あったのですが、特にGitが苦手でした。

そこで見かねた先輩に一つひとつ手順を教えていただいて、その後ミスも無くなってきました!

今回はそのGitの基本操作とコマンドを紹介していきます。

念のため前置きですが、セプテーニ・オリジナルはGitを使いこなしている方ばかりです。この記事はGitってどうなってるの…というレベルの新人でもGitで作業ができるようになるまでの手順です。

Gitの基本作業の流れとコマンド

はじめに

セプテーニ・オリジナルのGit運用については、すでに先輩が記事にしてくれています。 labs.septeni.co.jp 今回は、Gitフローを使った運用方法をしている前提で、作業ブランチで作業〜その反映までを紹介します。

1. ブランチを作成する

リモートでブランチを作成します。

2. ブランチ名を確認する
git fetch

作成したリモートブランチを、ローカルリポジトリでも参照できるように取得します。

git branch -a

リポジトリのブランチ、ローカルブランチとリモートトラッキングブランチを全て表示します。git branch だとローカルブランチのみが表示されます。

※リモートトラッキングブランチはリモートブランチを参照するためのブランチ。

3. 作業ブランチをチェックアウトする
git checkout ブランチ名 

リポジトリにあるブランチをワーキングツリーという作業場に展開します。コミットのハッシュ値を指定してそのコミットを展開することもできます。ファイル名を指定すると、そのファイルの最新コミットの状態が展開されるので、作業内容を途中でリセットしたいときにも使えます。

4. 現在の作業の状態を確認する
git status

ファイル名とそのステータス(new file, modifiedなど)、現在のブランチ名が一覧で表示されます。具体的な変更内容は、git diffで見れますがInteliJの方が見やすいので、InteliJのgit機能を使っています。InteliJのgit機能については、先輩が詳しく書いてくれています。 labs.septeni.co.jp

5. 作業内容をインデックスに登録する
git add ファイル名

作業内容を直接コミットすることはできず、インデックスと呼ばれるキャッシュに登録してからコミットできるようになります。git add .にすると、全てのファイルを登録できます。

git add -p

変更点を見つつ、必要な部分だけインデックスに登録したい、という時は、git add -pがおすすめです。数行単位で変更点が表示されるので、登録する時は y(yes)、しないときは n(no) を選んでくださいね。

6. インデックスに登録された内容をコミットする
git commit

このコマンドを打つとコメント入力欄が表示されるので、コメントを入力し保存してコミットします。git commit -m コメント を使って、コミットとコメント追加同時にすることが多いです。

7. リモートブランチにPushする
git push origin ブランチ名

git branchコマンドで、ローカルブランチ一覧を表示してブランチ名を確認し、Pushします。(リモートブランチとローカルブランチ名は同じだという前提です。)

基本的にはこの流れを繰り返して開発を進めていきます。

お役立ちコマンド

作業を途中で保存する
git stash

現在の変更内容を一時保存できます。git stash save コメント だとコメントを付けることができます。

git stash list

stashの一覧を表示

git stash pop

最新のstashを適用します。(stash listからは削除されます。削除したくないときはgit stash applyを使ってくださいね。) git stash pop stash@{N}で、N番目のstashを適用できます。

git stash clear

stashを全て削除

ブランチを削除する

ブランチが増え過ぎたら、ミスに繋がるので削除します。

git branch -d ブランチ名

ローカルブランチを削除します。

git push --delete origin ブランチ名

リモートブランチを削除します。もっと短いコマンドもあるようですが、deleteと付けた方が間違って消すことも少ないと思っています。

Commitを取り消す(作業内容も消す)
git reset -- hard 戻りたいコミットのハッシュ値

ワーキングツリーの変更も消え、完全に指定したコミットと同じ状態になります。戻りたい地点のコミットのハッシュ値は、git log / git reflogで確認します。resetの場合は、他ブランチを含めた履歴が表示できるreflogの方が使いやすいと思います。

git log

チェックアウトしているブランチのコッミットログを表示します。

git reflog

リポジトリとブランチのHEADの履歴、例えばコミットでのHEADの変更や、チェックアウトでのHEADの変更などを一覧表示できます。

※ちなみにresetに失敗したときは、戻りたいコミットのハッシュ値を指定したらreset前に戻れます!(最高!)

Commitを取り消す(作業内容は残す)
git reset head^

作業内容はそのままに、commitとaddがされる前の状態に戻ります。

※head^は最新のコミットの一つ前のコミット

addを取り消す(作業内容は残す)
git reset head

git reset headは、インデックスを最新コミットのHEADの状態に戻します。つまりaddが取り消され、ワーキングツリーに作業内容が展開されます。

git resetについてはこの記事がすごく分かりやすかったです。 qiita.com

Commitを取り消すCommitをする
git revert 取り消すコミットのハッシュ値

resetコマンドで取り消したけど、リモートにpushできない。。という問題にはrevertが使えます。revertは取り消したいコミット自体は消さずに、新しく取り消すコミットを作って上書きしてくれるので、リモートとの整合性が保たれます。 ※resetは戻りたいコミットを指定しますが、revertは指定したコミットを取り消します。戻りたいコミットの一つ後を指定してくださいね。

git revert -m 1 取り消すコミットのハッシュ値

マージを消すときは -m 1をつけます。1という数字は親番号といい、コミットを取り消したいブランチが元のブランチU(1)か、派生ブランチ(2)かを示しています。通常は1を使います。

リモートの変更を取り込む
git pull origin ブランチ名

git pullだけだと、チェックアウトしたブランチに設定されているリモートブランチの変更を取り込みます。慣れないうちはブランチ名を指定したほうが安心だと思います。

使いたいコマンド
git grep -e 検索したい単語 

インデックスとワーキングツリーのファイルからファイル横断で検索してくれます。git grep -e 検索したい単語 –and -e 検索したい単語 だとand条件も使えます。InteliJでも同じ検索機能があるんですが、()とかスペースを入れられなかったので(私が知らないだけかもですが)良いなあと思っています。

まとめ

セプテーニ・オリジナルはエンジニアのプロ集団でありつつ、学ぶ環境が整っていて、新人エンジニアにはありがたいです。

参考図書:Gitによるバージョン管理

お借りして読んだ本を参考にしました。Gitの仕組みを詳しく解説してくれています。

Gitによるバージョン管理

Gitによるバージョン管理