🪄

【不定期更新】Gitコマンドの細道

2024/04/14に公開

まえがき

普段はVScodeのソース管理でGitを使っているTim daikです。
以前はVScodeを使ってMarkdownを書いていたのですが、少し前にObsidianにハマってからMarkdownを書くときはマークダウンエディタを使用しています。

VScodeから浮気して出てきた課題が「Git操作がやりにくいことこの上ない!!」です。
前述のとおりVScodeには左側のサイドバーにあるソース管理からGit操作を行えます。
浮気先のObsidianにはもともとGit操作用の機能が無いものの、プラグインが豊富にあるため、Gitの拡張機能を使用することで解決できます。
しかし、コミットやプッシュなどの操作をGitを使用せずにプラグイン用のJavaScriptで実行しているため、操作が重いなどUIが気に喰わないなど使いずらいです。

そこでこれも機会だな、と思い、Git操作をCUI上で完結できるようになろう!と考えました。
他の理由として、

  • Gitについての理解を深められる
  • Gitの機能を最大限に活用できる
  • なんやかんやCUI上での操作のほうが早いだろう

などがあります。
結果的には操作速度が向上しましたし、Gitへの理解もちょっとずつ深められています。
しかし、コマンドの種類がなんせ多いので、忘れてしまいます★
そこでこの記事では筆者である私が よく使う・たまに使う・あまり使わないけど必要 の3つに分類したGitコマンドたちを紹介しています。

この記事を

  • GitをCUI上で操作したい人々
  • Gitのさまざまな機能を使いこなしたい欲のある人々
  • Gitのコマンド覚えられねえよ。。な人々
  • 上記3つが当てはまる筆者

に捧げます。

普通に最初はVScode上などGUIのほうが操作しやすいので、コマンド操作を楽しむ感覚で取り組むと良いと思います。
VScodeのほうが楽な場合が多いので、ムリにコマンドラインで操作しなくても大丈夫です。
しかし、ところどころコマンド操作は必要なのでチートシートみたいにご利用ください。

よく使う

自分がよく使うコマンド集です。
他の皆さんも使いがちなラインナップとなっているはずなので、特にオプションをご参考下さいませ。

git commit

いわずもがなコミットをするためのコマンドです。
通常はコミットメッセージをつけたりとオプションを使うので、使いがちなオプションまとめます。


🚧コマンドオプションを追加する

git status: 各ファイルの変更状況を把握する

各ファイルが

  • 新規ファイルなのか削除ファイルなのか
  • 名前を変更しただけなのか
  • ステージングされているのか否か

など、変更状況は必須レベルに確認したいですね。
そんな時はgit statusが使えます。

git status

いつもVScodeの「Git History」という神拡張機能に頼っているため、ぶっちゃけgit statusの凄みが感じられにくい今日この頃です。
ただし地味に使うので感謝は忘れません。

git reset: コミット履歴に対して取り消しを行う

主にステージングの取り消しや、過去のコミット時点に復帰する場合はこのコマンドを使用すると良いです。
過去コミットに復帰する際はgit logでその時点で表示されるハッシュ値commit-hash-valを確認し、以下のコマンドに代入します。

git reset --hard <commit-hash-val>

似たようなコマンドにgit restoreがあります。
ステージングの取り消しはこのコマンドでも可能ですが、このコマンドはファイルの具体的な変更に対しての操作に向いています。
例えば、ステージングエリアで特定のファイルのみ変更を取り消すなどです。

git restore: ステージングの取り消しを行う

先ほど紹介したばかりですが、このコマンドを使用することで、うっかりステージングしてしまったファイルのステージングを取り消しできます。

git log

リポジトリに記録しているコミット履歴を見ることが出来るコマンドです。
VScodeでは拡張機能のGit Historyが非常に見やすくて、よく使うのですが、VScode以外の例えばObsidianなどのMarkdownエディタを使う時にコマンドを使いたい時が多いです。
また、コマンドオプションを使うことでかなりログをカスタム表示できるので、これらをまとめておきます。

q: 終了するとき

まずgit logを使用するにあたって、表示の終了方法を知っておいたほうが良いです。
どういうことかと言うと、git logの出力を見て頂ければいいと思います。

そう、終了コマンドが分からなくて永遠にログを見させられます。
ということで終了コマンドをまず覚えましょう。

q

半角qを入力するだけ。ホンマにこれだけ。。

-n: 表示コミット数の制限

通常git logコマンドを使用すると、全てのログが表示されるまでスクロールしていく必要があります。
全ログが不要で、直近のコミットだけを確認したいときは以下のようにします。

git log -n 5

今回は最新5つのコミットが表示されます。
-nオプションの後に任意の数字を入力すると、その数字分だけのコミットが表示されます。


🚧上に他のよく使うコマンドも随時追加

たまに使う

頻繁には使いませんが、かなり使うので覚えておきたいコマンド集です。


🚧上にコマンドを随時追加

あまり使わないけど必要

ホンマに使わないですが、いざという時に覚えておくと便利、否、覚えておかないといけないコマンド集です。

git rm -r --cached: コミット済みのファイルを.gitignoreに追加したい時

.gitignoreにファイルを追加しても、追跡対象になっていた時がたまにあります。
このままでは.gitignoreにファイル・フォルダ名を書いたところで、全然Gitコミットとして記録されていくので、追跡対象外にしてやる必要があります。

git rm -r --cached <file-or-folder-name>
git rm -r --cached ./README.md # 例: README.mdを追跡対象外に加えるとき

これでGitのコミット記録から外されますが以前のコミット履歴は残ってしまうので、コミット履歴を削除したい場合は、後述するコミット履歴を削除したい時を参考にしてください。

コミット履歴を削除したい時

🚧力尽きたので随時追加

git config core.quotepath false: git statusでの日本語ファイル名の文字化けを直したい時

git statusコマンドを使ってファイルを表示する際に、ファイル名が日本語のものが含まれていると文字化けすることがあります。
なんとなくですが以下のようにファイル名が表示されます。

"\287\341\202\109\280\377\295.pdf"

この文字化けを解消するには以下のコマンドで設定を変更してやる必要があります。

git config --global core.quotepath false

--globalオプションで現在のリポジトリだけでなく、全体の設定として扱えます。
基本的にはグローバルで問題ないでしょう。

git diffでも文字化けするのを直したい


🚧上にコマンドを随時追加

参考

GitHubで編集を提案

Discussion