0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

インターンで使ったgitコマンド

Posted at

インターンで使用したgitコマンド集

普段の個人開発やチーム開発で多少gitを使う事はあるけど、あまり詳しくないよ、、という方に向けて書く記事です。あとは自分用のメモ的な感じです。

今回のインターンではPostgreSQLのOSSコミットを行ったので、その関連になります。自身がcommitする事は無く、他の人の履歴を遡ったり、パッチを作成したりするのがメインだったので、cherry pickのようなコミットやマージに関するコマンドは少ないので少ないのでご承知起きください。

git show

これを打つと、headのログメッセージやファイルの差分が表示されます。ブロブやタグなども見れますが、自分はコミット以外見ていないです。以前の変更がどのようになっているかを確認したい時などに使用しました。
詳しく知りたい人は

man git-show

などとすればマニュアルが読めるので、そちらを確認して見てください。

ついでに、

git show --numstat

とすると
どのファイルに何行の変更を加えたか、が見ることが出来ます。--sattでも同様のことができるのですが、--statだけだと合計で何行のinsertとdeleteがあったかしか表示されず、ここのファイルについては見ることが出来ません。--numstatは詳細などを省くことなく、より詳しく確認することが出来ます。

git blame

このコマンドでは指定されたファイルの各行が誰によって、いつ変更されたかなどが確認できます。これによって、気づいたら変数名や関数名が違った時に、いつ変更されたのかを遡ったり、どのバージョンから変更が加えられたのかを確認することができます。
自分は、ある関数がいつから使われているのか知りたくて、(42行目の変更がいつされたのか知りたい時)

git blame | grep 42

として使用しました。
関数やある特定の文字列が加えられたときのコミットを調べたいときは、

git blame -L:func_name example.c
git log -p -S 'word_ur_looking' example.c

などとすれば調べられます。他にも正規表現で調べたりなど色々あるので、詳しく知りたい方はman git-blameなどで調べてみるといいかもしれません。

git format-patch

このコマンドはpatchファイルを作成する時に使用するコマンドです。ちょっと話が逸れますが、今回のPostgreSQLのOSSコミュニティではgitなどでissueを立ててpull requestなどを作成して、、、などの現在メジャーな開発方法ではなく、メーリングリストでpatchファイルを送信し、それを自身のエディタで適応させたのちその変更に対して議論を重ね、最終的に偉い方が本体にマージする、という形の開発でした。なのでpatchファイルを作成してそれをメールで送る際に使用する時に使用するコマンドがgit format-patchでした。

git diff > example.patch

としてもpatchファイルが作成できるのですが、これだと変更差分のみがpatchファイルに入力されます。

git format-patch -1

などとすると最新の(-1をしているため)コミットメッセージや著者情報などをpatchファイルに入力し、自動的にファイル名を名付けてくれる。(ファイル名はコミットメッセージから作成される)
また、二つや三つの場合は連番にしてくれるので、正式なpatchファイルはこのコマンドで作成されることが多いらしいです。

git apply , git am

これらのコマンドは先ほど作成したpatchファイルを自分の手元で適応する際に必要となるコマンドです。
git applyは単に変更を取り込むだけのコマンドです。コミット情報などは反映されず、手元で変更を確認したい時などに使用します。
それに対してgit amはコミット履歴を作成します。つまり、現在の自分のファイルに対して

git am 0001-your-changes.patch

などとすると、0001-your-changes.patchがコミットされた状況になります。なので、このgit amコマンドはgit format-patchで作成した、コミット履歴付きのpatchファイルにしか適用されず、git diffなどで作成されたファイルをgit amする事はできません。

その他

その他ということで、普段の開発でも使用するであろうコマンドで、今回のインターンでも使用したコマンドも一応記載しておきます。本当に基礎的なコマンドなども一応載せておくので(add, commitなどは流石に飛ばします)、ご確認のために、、、

git reset

このコマンドでは、addやcommitした変更を取り除けます。
簡単にまとめると以下のような感じです

  • reset --hard :add、commit、ワーキングツリーの取り消し

  • reset --mixed:commitとaddの取り消し

  • reset --soft :commitのみ取り消し

git revert

このコマンドは履歴を保持しつつある特定のコミットを新しいコミットで打ち消すことが出来ます。ある特定のコミット以降の変更がそのコミットの変更に依存していた場合などはコンフリクトが起こる可能性があるので、それらは手動で解決しましょう。

まとめ

今回のインターンではメーリングリストでいろいろ作業を行なったため、patchファイルを作成したり、それの変更を適用させたりと、普段ではあまり使わないコマンドを使用しました。ブランチを切って、そこでpull requestの内容を取り込んで、、などとせずpatchファイルを送りあって、それに関して英語で議論しあう、という普段あまりしない体験だったのですが、とても面白かったです!!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?