はじめに
私は2023年にエンジニアとして採用をしていただいて、現場に配属された それまでチーム開発はおろかまともにgitも使っていなかったので、「○○してください」と言われたときに「git ○○」と検索をしていた。
配属されたときによく見た「初心者のためのgitの使い方」などには求めている内容が見つからなかったので、一年目に覚えておくと困らないコマンドについて紹介する
超初級編
ここは他の記事にもあるので、あえて簡潔に書く
- ワークツリー (Working Directory):プロジェクトの作業ディレクトリで、実際にファイルを変更・編集する場所
- ステージングエリア (Staging Area) / インデックス (Index):コミットする変更を準備する場所。ステージングエリアに追加されたファイルは、次のコミットに含まれます。
以下の画像の中が自分の頭の中にスッと入ってきたので、添付しておく
変更した内容を確認
- ワークツリーで変更された内容を確認するには、
git status
コマンドを使用する - またそこで変更があったファイルを
git diff
コマンドで確認する
- ワークツリーで変更された内容を確認するには、
変更した結果をステージングにあげる
git add <file name>
で編集しただファイルをgit commit
に追加git add
では編集したファイルをステージングに追加
変更した結果をリモートリポジトリにあげる
git commit
でaddしたファイルをコミット化する
個人的によく使うコマンドの流れ
git status //変更したファイルを確認 git diff //変更した実装の差分を確認(typoないことなど確認) git add . //「.」で変更したすべてのファイルをステージングにあげる git commit -m "xxx" //コミット名をつける git log //コミットした内容を確認できる git push // リモートリポジトリにアップする
こう言われたらこのコマンド
「mainブランチからブランチ切って作業してください」
- 並列で作業するために、ブランチというものが存在します。
- 基本的には、機能ごとやissueごとだと思いますが、そのあたりはチームのルールを参照してください
git branch
- 自分が今いるブランチがわかるコマンド
- 以下は、
main
ブランチにいることを示します
$ git branch * main issue1
git checkout xxxxx
:ブランチを切る- ブランチを切るには
checkout
を使います - 上の例では、既に存在するブランチに対して、ブランチの変更のために使うコマンドです
- ブランチを切るには
git checkout -b new_branch
:ブランチを作成する- ブランチは誰かが作成しなければいけません
- そのため、新しいブランチを作成する場合、使用するコマンドです
「ローカルのブランチ多いですね、pushしたブランチがmergeされたら削除していいですよ」
- おそらくあなたのブランチはこうなっているはずです。
$git branch >main *test develop_1 develop_2 develop_3 develop_4 develop_5 develop_6 develop_7
git branch -D develop_1
:任意のブランチを削除したい-D
オプションで削除することが可能です- 削除するブランチにいると削除できないので、他のブランチに移動しておく
ブランチ関連では、
checkout
を使用する時とbranch
を使用する時があり少し苦労しました
「20commit遅れてます。rebaseしてください」
- 開発スピードが遅いとブランチを切った時点からmergeしたい時に、他の人が大量のコミットを追加していることがあります。
git rebase <コミットハッシュ>
:これでベースにしたいコミットを変更することができます。rebase
は、ベース(もとになるコミット)をつけかえるものです
「あ、コンフリクトしてます!」
- コンフリクト直せればgitわかるマン(自称)ぐらいになれそうです。
git rebase
すると、ターミナルのメッセージにconflict
という文字が出てきて、失敗するはずです- 以下のコマンドで修正できます
git rebase --continue
:これでコンフリクト作業を直すというモードになりますgit rebase --abort
:これでミスった時にもとに戻れます、逃げられます!コンフリクトが起きるとどちらが正しいのかをこちらで判断しなければなりません
- しっかり見極めて修正しましょう
<<<<<<<<<<HEAD^ red ========== >>>>>>>>>>388d0g09d08d blue
- よくやる流れ
$git rebase -i <コミットハッシュ> $git rebase --continue $git grep "<<<<<" //コンフリクトする場所を探す //直す $git grep "<<<<<" //直ったか確認する
私「これ不要になった、だるい、消したい」
- 変更した点を削除したい
$git status >test1.md >test2.md >test3.md ...
- 私は
git reset
をよく使います - 例)test1.mdだけ消す
$git add test1.md $git commit -m "削除" // git logすると削除が一番上にくる $git reset --hard HEAD^
git reset --hard HEAD^
- HEAD^にある変更点もすべて削除する
- 上記の例だと
test1.md
が変更されてないことになる
私「この追加を最新のコミットにまとめたいな」
git reset --soft HEAD^
- HEAD^にあるコミットのファイルをステージングにおろす
git add
したときと同じ状態- 個人的には、最新のコミットと追加しようとするファイルを同じコミットにまとめたいときに使う
$ git add test2.rb $git commit -m "最新のコミット" //test2.rbを変更した「最新のコミット」とほぼ同じ内容 $git reset --soft HEAD^ $git status // test2.rbがステージングにある状態 $git add test2.rb $ git commit -m "一緒にしたコミット"
- 参考になったQiitaの記事 qiita.com
おまけ
git log --oneline
:git logだとログが詳細に出てくるので、logの情報を1行で出すコマンドgit reset <ファイル名>
:ミスってaddしてしまったファイルをステージングから削除するgit diff --stat --name-only <コミットID A> <コミットID B>
:コミットID AからコミットID Bまでの差分のファイルが標示されるgit reset --hard origin/xxx
:リモートリポジトリのxxx
ブランチのHEAD^と同じ内容になるgit reset --hard
はブランチにも使用できる
- aliasを使用する
- 私は
git push
→git ph
、git checkout
→git co
、git branch
→git b
などにしています
- 私は