11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

他人が書いた ようわからんコードを`git blame`で追う

Last updated at Posted at 2020-07-19

長期インターンが開始から2ヶ月経とうとしており、無事チュートリアルも終了した段階です。

本業務で自社プロダクトのissueを進めていると、**「このソースコード何してるんだろう...? 誰が編集したんだろう...?」**みたいなことがよくあります。

そんな時に**git blameで、ソースコードのコミット履歴からいつ誰がどのコミットで作成・編集したのか**を追うことが出来ます。

Git blameコマンド

ターミナルで$ git blame ファイル名を実行します。

$ git blame app/models/post.rb
435ed96f (TsuboyaTaiki 2020-05-08 17:41:29 +0900  1) # frozen_string_literal: true
435ed96f (TsuboyaTaiki 2020-05-08 17:41:29 +0900  2) 
679dd29e (TsuboyaTaiki 2020-04-30 10:59:39 +0900  3) class Post < ApplicationRecord
d97256ae (TsuboyaTaiki 2020-05-04 18:34:45 +0900  4)   validates :account_id, length: { maximum: 255 }, presence: true
d97256ae (TsuboyaTaiki 2020-05-04 18:34:45 +0900  5)   validates :post_sentence, length: { maximum: 255 }, presence: true
d97256ae (TsuboyaTaiki 2020-05-04 18:34:45 +0900  6)   validates :target_post_id, length: { maximum: 255 }
b8179705 (TsuboyaTaiki 2020-04-30 16:32:40 +0900  7) 
8eccd041 (TsuboyaTaiki 2020-05-04 19:00:07 +0900  8)   belongs_to :account
435ed96f (TsuboyaTaiki 2020-05-08 17:41:29 +0900  9)   has_many :goods, dependent: :destroy
a745018e (TsuboyaTaiki 2020-05-07 10:45:35 +0900 10) 
435ed96f (TsuboyaTaiki 2020-05-08 17:41:29 +0900 11)   has_many :reply_posts, class_name: 'Post', foreign_key: 'target_post_id', dependent: :destroy
a9768c5c (TsuboyaTaiki 2020-05-15 17:12:14 +0900 12)   belongs_to :new_post, class_name: 'Post', foreign_key: 'target_post_id', optional: true
679dd29e (TsuboyaTaiki 2020-04-30 10:59:39 +0900 13) end

ソースコードの各行に対して、

  • コミットのハッシュ値
  • 変更者名
  • コミット日時

などの情報を得られます!変更者名がわかれば直接質問しに行くこともできます!

コミットの変更内容を詳しく見たい場合はgit showにかけます($ git show コミットのハッシュ値)。

$ git show 435ed96f
commit 435ed96f2b73e4ecc4bc79a676037bc075a626df
Author: TsuboyaTaiki <tsuboyataiki@taiki-mac.local>
Date:   Fri May 8 17:41:29 2020 +0900

    20200508_2

diff --git a/Gemfile b/Gemfile
index ba11cb2..28a4a0c 100644
--- a/Gemfile
+++ b/Gemfile
      ・
      ・
      ・

行間指定

ソースコードが長い時は、-Lオプションで行間指定します!

$ git blame -L 4,6 app/models/post.rb     # 4行目から6行目
d97256ae (TsuboyaTaiki 2020-05-04 18:34:45 +0900 4)   validates :account_id, length: { maximum: 255 }, presence: true
d97256ae (TsuboyaTaiki 2020-05-04 18:34:45 +0900 5)   validates :post_sentence, length: { maximum: 255 }, presence: true
d97256ae (TsuboyaTaiki 2020-05-04 18:34:45 +0900 6)   validates :target_post_id, length: { maximum: 255 }

GitHubから

GitHubのCodeタブにも、Blameという項目があります。

スクリーンショット 2020-06-17 15.24.48.png

Blameに飛ぶと、

スクリーンショット 2020-06-17 15.27.15.png

こんな感じ!

GitHubからだと、GUIで操作できます。
あと、コミット時のコメントが簡単に見れるのも利点です!

終わり

git blameは、バグの混入などがあった時などに使われることが多いようです。

でも今回のようなユースケースもあるので有効活用していきたいです...

11
5
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
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?