Upgrade to Pro — share decks privately, control downloads, hide ads and more …

とりあえずこれだけ知っていればお仕事ができる(であろう)gitガチ入門

 とりあえずこれだけ知っていればお仕事ができる(であろう)gitガチ入門

1月29日にインフィニットループ社内勉強会で使用した、git入門用スライドです。

Infiniteloop

August 17, 2023
Tweet

More Decks by Infiniteloop

Other Decks in Programming

Transcript

  1. gitのリポジトリ関係図 ローカル リポジトリ ローカル リポジトリ リモートリポジトリ ソースの 作成・改修 ソースの 作成・改修

    ローカル環境 コミット作成 コミット作成 コミットのpush コミットのpush コミットのclone merge / rebase コミットのclone merge / rebase
  2. ファイルの状態  [modified:] 既存のファイルに変更があったよ、という状態です。  [Untracked] gitの管理下に無いファイルが存在してるよ。という状態です。 つまり新規作成されたファイルですね。  [both modified:] 取り込んできたコミットの内容と自分が編集した(だけではありません)箇所等で 変更内容が重複しており、どちらを反映させればよいか

    gitだけでは判断ができず ユーザーの修正を待っている。という状態です。コンフリクトと言います。 git status 現在の状態から、どのファイルが変更されたか。どのファイルが新たに追加されたか。という情報を閲覧できます。 こちらのコマンドは恐らくgitで最も使うコマンドかと思います。 コミットを作成する前や作成した後など、何かしらの変更を加えた際は都度git statusで確認する癖をつけると安心です。
  3. git add 新規作成されたファイルや、変更のあったファイルをインデックスに追加、ステージングに追加など難しい言い方をされることが多いですが 簡単に言うと次回コミットの対象にするファイルを選択するコマンドです。 modified: wasshoi1.txt modified: wasshoi2.txt Untracked files

    ./wasshoi7.txt modified: wasshoi4.txt modified: wasshoi5.txt new file: wasshoi8.txt wasshoi4,5,8を修正・追加 #modified: wasshoi4.txt #modified: wasshoi5.txt #new file: wasshoi8.txt なんか一人になった #deleted: onnna.txt add前の編集中のファイル ステージングに登録中の ファイル ローカルコミット git commit git add で登録したファイルをコミットという単位にパッケージ化して登録するコマンドです。 1コミットはなるべく規模を小さく区切ると、バグの調査やコミットの取り消しが容易になるというメリットがあります。
  4. ローカル リポジトリ リモートリポジトリ ローカル環境 コミットのプッシュ https://github.com/vjsigsig/testhoge.git リポジトリURL git push ローカルにて作成したコミットをリモートリポジトリに反映させるコマンドです。改修・追加したコミットは最終的にこのコマンドによって

    リモートリポジトリに送られ、改修を終えます。(現実的にはレビューや新たに発生したバグで更にコミットを追加するのですが…) ローカル ゲームオーバーになった ひとりになった 危ない水着買ってやった 女の子仲間になった リモート ひとりになった 危ない水着買ってやった 女の子仲間になった ゲームオーバーになった push
  5. git stash 改修中のファイル(例によって厳密にはファイル単位ではありませんが)を亜空間に送り込むコマンドです。 modifiedやdeleted状態のファイルが、移動元・移動先何れかにしか存在していないコミットの中に含まれていた場合、ブランチ間の移動が 出来ないなど、改修の真っ只中の状態は割と制約を受ける事が多いです。 こちらのコマンドで今の変更を一時的に亜空間に送り込みましょう。 もちろん後から取り出せるのでご安心を。 ただ、stashは割と信用できない所があり、個人的にはstashに頼りすぎずこまめにコミットしてしまう事をおすすめします。 modified: wasshoi1.txt modified:

    wasshoi2.txt deleted: wasshoi3.txt add前の編集中のファイル nothing to commit, working directory clean 未編集状態 『体験した事故事例』 うっかりHEADコミットで1000行程改修してしまったので、目的のコミットに反映させるため手動rebase(rebase -i)を行う。 目的のコミットをHEADにし、stash popした時点でちょっと用事を思い出し、手動rebase取消(rebase --abort)。 stash pop → No stash found. → 地獄 ①git stash ①git stash ②git stash pop ②git stash pop
  6. git diff 現在行っている修正を、指定の箇所・ファイル・状態と比較して確認できるコマンドです。 デフォルトでは、最新のコミットとの比較に見えるのですが、正確にはインデックスとの比較です。addでインデックスに登録した後再度同じ ファイルを修正し、git diffを使用すると再現できます。 様々な対象との比較が出来るので汎用性が高く、こちらもよく使うコマンドの一つです。 @@ -308,28 +308,28

    @@ class Team /** * フィーバータイムログ structure形式に変換する - * @param array $fever_time_log フィーバータイムログ - * @param int $fever_interval フィーバーの時間 - * @return array <structure name="FeverLog">型 + * @param array $fever_time_log フィーバータイムログ + * @param int $fever_interval フィーバーの時間 + * @return array <structure name="FeverLog">型 */ - static public function toFeverLogStructure($fever_time_log, $fever_interval) + public static function toFeverLogStructure($fever_time_log, $fever_interval) 現在の修正 と インデックスとの比較 $ git diff 現在の修正 と HEADコミットとの比較 $ git diff HEAD^ インデックス と HEADコミットとの比較 $ git diff --cached 特定のファイル と 特定のファイルとの比較 $ git diff ./hoge1.txt ./hoge2.txt
  7. その他コマンド、ざっくり紹介 $ git checkout 1.ローカルブランチを切り替える  2.ローカルブランチを作成して切り替える  3.ファイルをHEADコミット時の状態に戻す これ以外にもたくさんの機能があり、覚えたての頃は、わかりにくいからコマンド分けろや!! と思っておりましたw $ git

    reset 1.指定のコミットまで打ち消す  2.ファイルのインデックス登録を取り消す こちらもcheckoutと同じく、似てるようで全く違う事をやる系です。 $ git cherry-pick 別のブランチからコミットを引っ張り込みます。 masterに居ながらorigin/characterなどのトラッキングブランチからも直接取り出す 事も可能ですが、元となるファイルが無かったり、あまりにも差分が大きい場合はコンフリクトしたり等、すんなりいかない事が多い です。
  8. まとめ ・後半は割と突っ込んだコマンドの紹介をさせて頂きましたが最初は clone ~ pushまでの 流れを覚えておけば OKです。 使っていくうちに自然と身についていきます。 ・繰り返しになりますが、こんなスライドだけで全部覚えようとしても難しいです。 実際に手を動かして実行結果を自分で確認しながら学ぶ学習法に勝るものは無いです。 ・gitが楽しく感じてきたら後は時間の問題。

    参考資料 サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 http://www.backlog.jp/git-guide/ Gitがこわくて触れなかったけど、このスライドで 理解できるようになったよGitサイトまとめ http://programmerbox.com/2013-07-17_git_summary/ Git ワークフローとそのチュートリアル | アトラシアン https://www.atlassian.com/ja/git/workflows