「git blame」は何をしますか?


314

の使用方法について多くの質問がありましたが、git blameよくわかりません。

私が見BlameGitHubのインターフェイス上のファイルの最上部にあるボタンを。それをクリックすると、左側のバーにユーザー名の差分が表示されます。それは何を示していますか?

git blameGitHubとは別に、なぜ実際に使用されているのですか?


67
"非難"も聞こえる場合は、このスクリプトをインストールして、git praise代わりに使用できます:) github.com/ansman/git-praise
Jon Kiparsky

7
それは非難でも賞賛でもないはずです。それは本質的に仮定的であり、客観的であったはずです。
pdvries

41
git objectively-determine-contributer同じリングはありません。
Ritwik Bose、

27
@RitwikBoseまたは単にgit who
aktivb '31

回答:


238

git-blameから:

指定されたファイルの各行に、その行を最後に変更したリビジョンの情報で注釈を付けます。必要に応じて、特定のリビジョンから注釈を開始します。

-Lを1回以上指定すると、注釈は要求された行に制限されます。

例:

johndoe@server.com:~# git blame .htaccess
...
^e1fb2d7 (John Doe 2015-07-03 06:30:25 -0300  4) allow from all
^72fgsdl (Arthur King 2015-07-03 06:34:12 -0300  5)
^e1fb2d7 (John Doe 2015-07-03 06:30:25 -0300  6) <IfModule mod_rewrite.c>
^72fgsdl (Arthur King 2015-07-03 06:34:12 -0300  7)     RewriteEngine On
...

git blameは、時系列で行ごとの変更履歴を表示しないことに注意してください。文書の最後のコミットまでの行を変更した最後の人物が誰であるかを示すだけHEADです。

つまり、ドキュメント行の完全な履歴/ログを表示するには、でgit blame path/to/fileコミットごとにを実行する必要がありますgit log


1
だから最後の人に会うだけなの?
リファットエルデムサヒン

2
はい、行を変更した最後の人を見ることができます。
マーク

@Markでは、IDEで注釈を付けると、内部的にgit blameコマンドになりますか?
Nagarajan Shanmuganathan

2
@NagarajanShanmuganathanはい、gitを使用している場合は、それが舞台裏で行われています。
マーク

153

コマンドは、それ自体を非常によく説明しています。あなたができるので、それは、特定のラインを書いたり、プロジェクトを台無しにしている同僚把握することだせいそれらを:)


105
コマンドを実行すると、実際に誰かを非難するように聞こえます。少なくとも、この投稿でそれがどのように機能するかを知る前に、それが私に聞こえた方法です。
フランシスコC.

12
@FranciscoC。あなたはこれを探しています:github.com/jayphelps/git-blame-someone-else
DustWolf

2
@FranciscoC。それはちょっとつまり、あなたがすることができますことを正確に行っていないものを、待って非難誰かを?
IanDess 2018年

16
@IanDessおそらく単なるセマンティクスですがgit blame、に似た永続的な効果があるかのように聞こえgit commitます。実際には、だれがどのような変更を行ったかを通知するだけです。それと、「非難」という言葉が持つ否定的な意味合いは、コマンドを遠ざけるべきもののように聞こえさせ、明確化を求めるこのような質問につながります。
フランシスコC.

20
明らかに、それはと呼ばれるべきgit praiseです。
pfnuesel

75

GitHubから

blameコマンドはGitの機能であり、ファイルに誰が変更を加えたかを判断するのに役立ちます。

その否定的な響きの名前にもかかわらず、git blameは実際にはかなり無害です。その主な機能は、ファイル内のどの行を誰が変更したか、およびその理由を指摘することです。これは、コードの変更を識別するのに役立つツールです。

基本的にgit-blameは、ファイルの各行を最後に変更したリビジョンと作成者を示すために使用されます。これは、ファイルの開発履歴を確認するようなものです。


2
これは冗長であるように見えますが、コミットとユーザーのIDの違いをコミットログから確認できます。ここですべてを理解している場合は、コミット履歴よりも永続性が低くなります。多分私は何かが足りないかもしれませんが、それは公の屈辱によって強制されたコーディング標準のようです。
user1431356

8
コマンドの名前は、Linusの特定のユーモアのセンスの結果であったと思います:)これは、誰かを侮辱するために使用するためのものではありませんでした:)便利なコマンドの名前を単に面白い(またはそうではない)ピックでした:)
Mladen B.

2
@ user1431356-重要なのは、特定の行に影響を与える最初のログ行が欲しいということです。それ以外の場合は、特定の文字列のログを検索する必要があります。(これは確かに実行可能なアプローチです。「git log -S」のマニュアルページを参照してください。)
azernik

1
「非難」というタイトルは、gitよりも前から存在していたものです。svnの実装を見てください。これは、Linus Torvaldsが付けた名前ではありません。
JackAce

「コマンドの名前は、Linusの特定のユーモアのセンスの結果だったと思います:)これは、誰かを侮辱するために使用するためのものではありませんでした:)」lol ...それは、Linusの性格であり、それは誰かを侮辱する。
Sinaesthetic

34

このgit blameコマンドは、ファイルに加えられた最新の変更を誰またはどのコミットが担当しているかを知るために使用されます。各行の作成者/コミットも確認​​できます。

git blame filename (コードのすべての行の変更を担当します)

git blame filename -L 0,10 (行「0」から行「10」への変更を担当します)

非難には他にも多くのオプションがありますが、一般的にはこれらが役立ちます。


2

git blameコマンドは、行の最終更新日リビジョンからの情報で行を注釈を付け、そして... Gitの2.22(Q2 2019年)で、そうだろう速いので、「周りのパフォーマンスの修正で、git blame特に線形の歴史(で、」最適化すべき基準)。

David Kastrup()によるcommit f892014(2019年4月2日)を参照してください。 (合併によりJunio C浜野- -コミット4d8c4da、2019年4月25日)fedelibregitster

blame.c:元のブロブを熱心に落とさないでください

親blobが非難するためにキューに入れられたチャンクをすでに持っている場合、1 blameステップの終わりにblobをドロップすると、すぐに再ロードされ、線形履歴を処理するときにI / Oとアンパックの量が2倍になります。

そのような親blobをメモリに保持することは、主に古いブランチからのマージを処理するときに追加のメモリプレッシャーを招く合理的な最適化のようです。


1

このgit blameコマンドを使用して、ファイルの内容を1行ずつ調べ、各行が最後に変更された日時と変更の作成者を確認します。

コードにバグがあった場合は、それを使用して誰がそれを起こしたかを特定してから、彼のせいにすることができます。Gitのせいは、せいにする(d)。

1行のコードの履歴を知る必要がある場合はgit log -S"code here"、git blameよりも簡単なを使用してください。

git log vs git blame

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.