25
18

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の「--color-moved」オプションがかなり便利だったの紹介してみる

Posted at

Gitの --color-moved オプションで、 移動だけの差分をいい感じに表示する ことができ 、かなり便利だったので紹介してみようと思います。
https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---color-movedltmodegt

ちなみに2年くらい前からあるようですが、最近知りました :innocent:
https://www.infoq.com/jp/news/2018/04/git-2.17-released

※ 本記事のサンプルでは、Gitのバージョンは2.24.3、シェルはfishを使っています。

サンプル

例えば以下のようなクラスがあった場合。

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        menuInflater.inflate(R.menu.menu_main, menu)
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        return when (item.itemId) {
            R.id.action_settings -> true
            else -> super.onOptionsItemSelected(item)
        }
    }
}

onOptionsItemSelected を一番上に移動したい、となった場合、オプション無しの diff だと…
スクリーンショット 2020-07-02 14.28.20.png
元の位置にあった onOptionsItemSelected の削除と、新しい位置への onOptionsItemSelected の追加が表示されることになります。


しかしながら、 diff --color-moved=dimmed_zebra とした場合は…
スクリーンショット 2020-07-02 14.28.37.png
移動だけの差分なため、グレーアウトされた表示になります…!(かなりわかりやすい:grinning:


さらに便利なところがありまして、ただの移動のつもりが

R.id.action_settings -> true

R.id.action_settings -> false

に間違って変えてしまっていた場合は…
スクリーンショット 2020-07-02 14.28.54.png
移動したところだけはグレーアウト、変更があったところは通常の差分表示、とかなりいい感じに表示してくれます:clap:

オプション無しと --color-moved=dimmed_zebra を付けた時を比べてみると一目瞭然。かなり便利では…!

なし あり
スクリーンショット 2020-07-02 14.44.53.png スクリーンショット 2020-07-02 14.28.54.png

モードは6つ

サンプルでは dimmed_zebra を使っていますが、 --color-moved のモードとしては

no , default , blocks , zebra , dimmed-zebra , plain

の6つを指定可能です。( no はハイライトなし、 defaultzebra と同じなため、実質4つ。)

個人的には dimmed-zebra が一番いいのかなと思いますが、 派生元の blocks には

Blocks of moved text of at least 20 alphanumeric characters are detected greedily.

という条件があり、うまく移動の差分として表示されないケースもあるため、適宜モードを使い分ける必要がありそうです。

終わりに

Gitの --color-moved オプションで、移動の差分をいい感じに表示できることをご紹介しました。
このオプション自体は2年くらい前からあるようなので、まだまだ知らない便利なオプションがGitにはあるんだなと思いました。

25
18
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
25
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?