• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

git

date: 2021-01-04 excerpt: gitコマンドの使い方

tag: gitgithub


gitコマンドの使い方

概要

  • 厳密にはgitとgithubは異なり、gitを実装したサービスがgithubなのであるが、githubの機能についてもこのページに記す
  • 最近では人権の観点からmasterからmainなど呼称が変更されたものもある

インストール

debian, ubuntu

$ sudo apt install git

macOS

$ brew install git

windows

$ scoop install git

チーム開発のフロー

  • 自分コードをmainから分離するためにbranchを作る(1)
  • branchで開発を進め、pull requestを送る前に、mainからpullして差分を取り込む(2)
  • pull requestを送る(3)
  • 差分を確認し、レビューする(4)

(1)ブランチを作成する

$ git branch <my-dev-name>
$ git checkout <my-dev-name> # ブランチを切り替え

(2)mainから差分を取り込む

(<my-dev-name>)$ git fetch
(<my-dev-name>)$ git rebase origin/main
(<my-dev-name>)$ git pull

(3)pull requestを送る

  • gitのweb画面からcreate pull requestのボタンを押す

(4)差分を確認し、レビューする

  • https://github.com/<team>/<project-name>/pull/10というURLがpull requestのとき
  • https://github.com/<team>/<project-name>/pull/10.diffと末尾につけると差分をdiffコマンドの出力の様に確認できる
  • なにか気になる点、修正すべき点があれば、pull requestのコメント欄に書き込む

コミットメッセージのプラクティス

  • コミットメッセージとコードの変更は対応しているべきである
  • コミットメッセージはレビュワーの負荷にも関係する
  • コミットメッセージに絵文字を使用する文化もあり、絵文字により変更の内容を示すものである
  • 絵文字の例
    • 🐛 :bug: バグ修正
    • 👍 :+1: 機能改善
    • ✨ :sparkles: 機能追加
    • 🔥 :fire: 不要な機能の削除
    • 👕 :shirt: lint修正
    • ⚡ :zap: パフォーマンス改善
    • 👮 :cop: セキュリティ対応
    • 🎨 :art: スタイリングの追加・修正
    • 📝 :memo: ドキュメントの追加・修正
    • ✅ :white_check_mark: テストの追加・修正
    • ライブラリ関連
      • ➕ :heavy_plus_sign: ライブラリの追加
      • ➖ :heavy_minus_sign: ライブラリの削除
      • ⬆️ :arrow_up: ライブラリのアップデート
      • ⬇️ :arrow_down: ライブラリのダウングレード
  • 絵文字と役割を示したテキストファイルを用意し、テンプレートに登録するとやりやすい
    • git config --global commit.template <filename>

設定

  • /git-config/に記載

基本的なコマンド

git clone

リモートレポジトリをローカルにコピーする

$ git clone git@foo:bar/project

リモートレポジトリをローカルの指定のディレクトリ名でコピーする

$ git clone git@foo:bar/project <target-directory>

git commit -m "foobar"(コミットメッセージ)の修正

以下のコマンドを打つとeditor(vim等)にて編集できる

$ git commit --amend

commit前のファイルの編集を取り消す

$ git restore ${FILENAME}

単体ファイルをリセット(HEADの状態に)する(単体ファイルをrevertする)

$ # gitレポジトリのトップで実行する必要がある
$ git checkout HEAD -- ${FILEPATH_FROM_TOP_DIR}
  • 様々なファイルを変更したが特定のファイルだけ、HEADの状態に戻したいとき
  • --は続く引数はファイル名として扱うという意味

現在の編集を取り消して特定のcommid idへ戻す

  • 誤って必要なファイルを消したとき
  • commitを放棄してもいいからもとに戻したいとき
  • commit idはgit logから確認できる
$ git reset ${COMMIT_ID}

ローカル管理のgitをリモートに関連させる

git remote add origin ${SSH_PROTOCOL_PATH}

httpsをsshへ変更

$ git remote set-url origin ${SSH_PROTOCOL_PATH}
  • 二段階認証等を導入するとsshでしか操作を受け付けなくなる

リモートのURLを確認

$ git config --get remote.origin.url
  • 対象のgitプロジェクト内部で実行する

コミット前のファイルの差分を確認

$ git diff ${FILENAME}

コミット後のリモートブランチとの差分の確認

$ git fetch origin master
$ git diff origin/master -- ${FILENAME}

git addで全部追加

$ git add --all

git directory

  • .git/のディレクトリのこと
  • git directoryはすべての変更や履歴を含んでいる

stageとcommit

  • stageはファイルを今編集している状態(git statusで変化が見える状態)
  • commitはcommitした状態

git config -l

  • git config -lで今の操作しているレポジトリの設定一覧を見るとが可能

git log

  • gitのcommitログ

git revert HEAD

  • ロールバックのこと
  • もとに戻す
  • もとに戻すための新規commitが生成される

master(main) branch

  • よく動くことを担保したい
  • その他は実験という位置づけ

git branch

  • 今いるbranch
  • git branch hogeでhoge branchを作る

git checkout ${BRANCH_NAME}

  • 特定のbranchに切り替える
  • git checkout -b ${BRANCH_NAME}で存在しないbranchでも切り替えられる

git merge

  • 同時にmasterと他のbrachのhashが同じ値を指すことになる
  • master branchにて、git merge ${TARGET_BRANCH}するとmergeになる

git remote update

  • マージせずに現在のbranchをリモートからローカルにアップデート

git remote show origin

  • リモートの情報を見るのに使う

git fetch

  • branchのデータをリモートからローカルに引っ張ってくる

explicit merge

  • 新たなマージコミットを作成するタイプのマージ

git pull

  • 自動マージ

pull request

  • web UIで作る
  • pull requestsのコメントはテンプレがある

リモートブランチのURLを知る

$ git config --get remote.origin.url

project コーディネータにとって重要なこと

  • pull requestの即時応答
  • accept内容の理解
  • issue trackerを正しく追う

CI/CD

  • CI: 自動テスト的なやつ
  • CD: ローリングリリース的なやつ
  • 既存のプルリクエストをアップデートするにはそのままcommitを刻めば良い

pull requestの編集差分をみる

pull requestのURLから差分を確認する

  • https://github.com/weppos/whois/pull/90というURLがあるとき
  • https://github.com/weppos/whois/pull/90.diffと末尾につけると差分をdiffコマンドのplane textで確認できる

リモートのmain以外のブランチに切り替える

  • git branch -aでリモートを含めたブランチ一覧の確認
  • git switchでリモートの任意のブランチに切り替える(ローカルの内容もリモートと同期される)
$ git branch -a # ブランチの一覧の確認
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master
$ git switch remotes/origin/dev # リモートのブランチに切り替える

センシティブなデータをgitのremoteに反映してしまった時の対応

  • 作業の流れ
    • remoteとlocalを同期する
    • git-filter-repoでlocalのレポジトリの履歴からセンシティブなデータを取り除く
    • remote urlが失われるので再設定
    • force pushでリモートを上書き
  • 参考
    • Removing sensitive data from a repository/GitHub Docs

git-filter-repoをインストール

ubuntu, debian

$ sudo apt install git-filter-repo 

センシティブなファイルを削除(履歴からも消える)

$ git filter-repo --invert-paths --path <target-file-or-dir>

remote urlを再設定

$ git remote add origin <git-url>

強制的にpushする

$ git push origin --force --all


gitgithub Share Tweet