20211016のGitに関する記事は5件です。

「どうせgit操作するならカッコいいツールでやりたいなー」→ lazygitはいかがですか?

どうもこんにちは、パンカメです。 筆者は普段Web開発に携わっています。 最近は、「どうせ開発するなら、自分のテンションが上がるツールを使って開発したいなー」と思っていて改めてVim入門したりdotfiles管理をもっと便利にしたりなどやっています。 その中でターミナル上でgit操作を快適に行うことのできるlazygitというツールを知り、こんなカッコいいツールがあるんだと衝撃を受けました! 普段の仕事ではまだVSCodeとtigを使ってgit操作を行っていますが、本格的に導入するために操作まわりを整理してみたのでぜひ覗いてみてください。 ┌┬(゜<――@ 「lazygitかっこいいので広めたい」 lazygitとは jesseduffield/lazygit: simple terminal UI for git commands lazygitをインストールすれば、ターミナル上でlazygitと打つだけで起動できて、ターミナルUIでgit操作ができるツールです。(qで終了できます)。 マウス操作も反応するのでパネル間の移動やコミットの選択をマウスで選択したりもできます。 基本的にはコマンド操作で全ての操作が完結するのがlazygitのいい所ですが、慣れないうちは便利ですね。 (このテキストベースで黒い画面で操作する感じがかっこいい…) インストール方法 インストールはとても簡単です。 公式のインストール方法を参考にインストールします。 筆者の場合は、WSLのUbuntuにlinuxbrew(homebrew)を入れているので、brewコマンドを使ってインストールします。 brew install lazygit lazygitの画面の説明 lazygitでは最初からいい感じにエリア(パネル)ごとにできることが決まっていて、やりたいことに応じてパネルを移動してコマンドでgit操作を行います。 パネル毎の領域がわかりやすいように透ける白背景で分かりやすく加工しています。 Status 今いるリポジトリとブランチ名を確認できます。 Files VSCodeのgit画面と同じく変更したファイルの一覧が表示され、addやcommit等を行うことができます。 Local Branches ローカルブランチの一覧が見れます。 ブランチの作成・削除・切替などを行う事ができます。 Commits 今いるブランチのコミット履歴が見れます。 コミットハッシュ値が黄色の場合はすでにリモートにpushしたコミットで、赤色の場合はローカルでのみコミットしたものになります。リモートにpushすると黄色になります。 Stash Stashの一覧が見れます。 applyやpopなどの操作を行うことができます。 Command Log lazygitでコマンド操作した場合に実際はgitコマンドが実行されており、そのコマンドの履歴を確認することができます。 操作方法 簡単な操作方法(これだけ覚えればとりあえずは使える!) lazygitはとりあえず、移動方法とヘルプが見られれば最低限すぐに使えるようになるので、「lazygitカッコいい!今すぐに触ってみたい」という人のために移動方法とヘルプの見方だけ抑えておきましょう。 移動方法 コマンド 説明 h,l or Tab,S-Tab パネル移動(進む/戻る) j,k パネル内移動(上/下) @ → Focus command log Command Logへ移動 ※他のパネルと違いCommand Logへの移動は@ → Focus command logで移動するようです(戻る場合は、ESCで戻れます)。 ヘルプの見方 操作がわからない場合はxキーを押せばそのパネルでできる操作コマンドの一覧を表示することができとても便利です。 例として、Statusパネルでxを押してみましょう(閉じる場合はESCで閉じます)。 次のようなヘルプウィンドウがフローティングで表示されます。 上部のコマンドがStatusパネルでのみ使えるコマンドで、下部のコマンドが全パネル共通のコマンドです。他のパネルでも同じような感じで表示されます。 一行の空行が区切りになっているので見方さえ覚えてしまえば簡単ですね。 基本的なgit操作編 rebaseやreflogなど応用的な操作もできるのですが、まだ使いこなせていないので基本的なgit操作について紹介していきます。 checkout -bする ここでは「develop」というローカルブランチを作成していきます。 「Local Branches」パネルに移動 nを押して、ブランチ名を入力してEnterで作成 checkoutする ここでは「develop」ブランチから「main」ブランチに移動します。 「Local Branches」パネルに移動 切り替えたいブランチに移動して、SPC branch -dする ここではローカルの「develop」ブランチを削除してみます。 「Local Branches」パネルに移動 削除したいブランチに移動して、dを押してEnterで削除 pullする リモートの「main」ブランチに他の人の変更が入ったと見立てて、「main」ブランチをpullします。 「Local Branches」パネルに移動 pullしたいブランチに移動して、p addする ファイル単位でadd 「Files」パネルに移動 addしたいファイルに移動して、SPC ※もう一度、SPCでファイルのadd取り消し ファイル内の行ごと(ハンク)でadd 行ごとにadd(ハンク)するのが簡単にできます。 vimと同じようにvでビジュアルモードにして複数行をハンクしたりもできるので、直感的にそして簡単に操作できます。 「Files」パネルに移動 ハンクしたいファイルに移動してEnterしてUnstaged Changesに移動 一行ずつハンクする場合は、SPC。vでビジュアルモードにして行選択してSPCすると複数行ハンクできます。 Unstaged Changes/Staged ChangesはTABで移動。Staged Changesから取り消したい場合も同じくSPCで取り消し。 「Files」パネルに戻るにはESC 全ファイルをadd 「Files」パネルに移動 aで全てのファイルをadd ※もう一度aで全てのファイルのadd取り消し commitする 「Files」パネルに移動 cでコミットメッセージを入力してEnterしてコミット pushする ローカルでのみコミットしている場合は「Commits」パネルのコミットハッシュ値が赤く表示されます。 このコミットをリモートブランチにpushします。 pushが完了するとコミットハッシュ値が黄色くなります。 Pでリモートへpush stashする 「Files」パネルに移動 sでstash名を入力してstash 戻すときは「Stash」パネルに移動 SPCでapply、gでpop、dでdropできます。ここでは、gでpopしています。 gitコマンドを直接実行する lazygit上で用意されていないgit操作を行いたい場合は、:でカスタムコマンドを実行することができます。 ここでは、ローカルで色々操作したけど、とりあえずリモートのブランチの状態に戻したいときに使うコマンドgit reset --hard origin/mainを実行してみます。 まとめ lazygitいかがだったでしょうか。 意外に操作方法を見てみると、簡単にできそうという印象があるのじゃないでしょうか。 筆者も最初は難しいかなーと思っていたのですが、パネル毎の役割とxを押せばとりあえずなんとかなるというのが分かってからはすごい使いやすいなーと思っています。 最初は筆者のように練習用のリポジトリを作って、そこで操作を色々試すのがおすすめです。 lazygitは操作した内容の実際のgitコマンドも履歴を見ればわかるので、知らないgitコマンドの意味を調べたりもできて結構gitの勉強にもなります! 今はtigをメインで使っているのですが、何か特別な設定をしなくてもたくさんのgit操作を行うことができるlazygitは慣れると便利です。 あと、やっぱりカッコいいです!ツールはどうせなら自分のテンションがあがるものを使っていきましょう!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

gitとgithubの連携で、sshキーを更新しても上手くいかない時の対処法

gitとgithubの連携が上手くいかない! gitとgithubの連携をする際、 調べた上記記事を見ながらよくわからないまま「ハイハイこんな感じね」と 適当に進めていざ接続したりpushしようとしたりとしたところ、 Git: Host key verification failed. と表示され、sshキーを再作成しても上手くいきませんでした。 いろいろ調べたところ、手順はvscodeを使おうが使わまいがほぼ同じ……。 どうやら、コマンド実行時の操作が間違っていたためうまくいかなかったと判明。 ↓同じミスをしていたが他にもいらっしゃったようです。 解決方法! ssh -T git@github.com 上記コマンドなどでssh接続する時、 Are you sure you want to continue connecting (yes/no/[fingerprint])? この表示が出た時にEnterキーを押していたため、 git君「何も入力しないってどういうこと!?     yesかnoか、フィンガープリントで答えてって言ってるじゃん!!」 となって上手くいかなかったったようです。 yesと入力してEnterキーを押したら、普通に上手く行きました。 表示されたメッセージはよく読もう!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Git】Qiita デイリー LGTM 数ランキング【自動更新】

他のタグ AWS Android Docker Git Go iOS Java JavaScript Linux Node.js PHP Python Rails React Ruby Swift TypeScript Vim Vue.js 初心者 集計について 期間: 2021-10-18 ~ 2021-10-19 GitHub スターをもらえるととっても励みになります LGTM 数ランキング ランキングに入る記事が見つかりませんでした。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

git hooksでpre-commit hooksを使って自動化した話

git のcommit前にlintやらを差し込みたいなということgit hooksを使って設定してみました。 git hooksとは gitが提供している公式の機能でgitの特定のイベントをトリガーにして自分が設定したscriptを実行させる機構です。 例えば、push前にtestを実行をさせたり、commit前にlintを走らせたりできます。 今回は、commit前にlintを走らせる処理を書きました。 設定方法(pre-commit) git hooks自体はgitに内蔵されています。 具体的には.gitの中にscriptのサンプルファイルがあります。 terminal でgitで管理しているプロジェクトのrootに移動して 下記のコマンドでhooksファイルがあるディレクトリに移動しましょう。 cd .git/hooks/ すると、以下のファイルがあり、 .sample という文字列をファイル名が除外して chmod a+x <ファイル> と権限を与えればhooksが有効になります。 applypatch-msg.sample fsmonitor-watchman.sample pre-applypatch.sample pre-merge-commit.sample pre-rebase.sample prepare-commit-msg.sample commit-msg.sample post-update.sample pre-commit.sample pre-push.sample pre-receive.sample update.sample 今回は pre-commitを使いたいので以下の用にリネームします。 pre-commit.sample -> pre-commit pre-commitのscriptを書く 実際にscriptを書きましょう。  今回はgolang-ci-lintを使って lintを実行させる formatを実行させる を行いたいので以下のようにしました。 #!/bin/sh echo "lint start" cd $(git rev-parse --show-toplevel) RESULT=$(golangci-lint run pkg/...) if [ -n "$RESULT" ]; then echo "lint failed" exit 1 fi git add . echo "lint finish" lintの実行場所を固定にする 下記は必ずscriptの実行場所が必ずproject rootになるように、gitの管理場所を取得して、そのディレクトリに移動するようにしています。 git rev-parse --show-toplevel lintの実行結果を格納 下記はlintの実行結果を格納しています。 これはあまりよろしくなく、本来は終了ステータスを格納すべきですが、誤ってそのまま実行結果の文字列を格納しちゃってます。 RESULT=$(golangci-lint run pkg/...) 強制的にformatをかけてcommitさせる pre-commit内でgit addしてる理由は、format後のファイルをステージするためにです。 git add . golangci-lintはauto formatの機能があるので、実際のcommitは以下の処理順番になります。 git commit コマンドを打つ pre-commitが発火 golangci-lint run pkg/... でファイルにformatがかかる git add . formatがかかって変更されたファイルが新たにstageされる commit 処理が走る このようにしておくと、formatのかけ忘れなどを防ぐことができます。 管理方法 これでhooksは完成しましたが、.git内にファイルがある関係上このままではgit管理ができません。 なのでhooksファイルとhooksの参照先ファイルを変更します。 変更方法は以下の通り 適当なディレクトリを作り、そこのhooksファイルを移動 mkdir .githooks mv ./git/hooks/pre-commit .githooks/ gitのhooksファイルの参照先を変更 git config core.hooksPath .githooks hooksに実行権限を付与 chmod a+x .githooks/pre-commit これで、hooksファイルの管理場所が.gitでは無くなったのでgit管理できるようになりました。 最後に hooks といえば husky 自分で作るのは面倒くさいと敬遠していたのですが、重い腰をあげて作ってみると思いのほか簡単にできました。 何かの参考になれば幸いです。 それでは良い git hooksライフを
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

git diff コメント行無視で変更行数を数える

自分用メモ。論理LOCでステップ数を数えるため用。 (新規ファイルではなく既存ファイルの変更行数を数える) 変更した行数の確認 git diff --stat -w -B -I '^\s*\/' <変更前のコミットID> <変更後のコミットID> 変更した内容の確認 git diff -w -B -I '^\s*\/' <変更前のコミットID> <変更後のコミットID> <変更前のコミットID> <変更後のコミットID>に関してはブランチ同士でも確認可能 --stat 変更行数を確認するときに役立つ -w スペースのみの変更も無視する -B 空行の追加・削除を無視する -I 正規表現にマッチした表現を無視する 正規表現 '^\s*\/' * 直前の文字が0回以上繰り返す場合にマッチ \s 垂直タブ以外のすべての空白文字 ^ 直後の文字が行の先頭にある場合にマッチ 以下のサイトを参考にさせていただきました。大変助かりました。 git diff関連 参考サイト https://qiita.com/uedatakeshi/items/5e467b3aaa7a0ecfa011 https://maku77.github.io/git/stats/count-changes.html https://iww.hateblo.jp/entry/20110605/p1     正規表現 参考サイト https://murashun.jp/article/programming/regular-expression.html
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む