Miles' Blog

天涯何處無幹話,何必要講實務話

diff

git diff 是個功能強大的指令。它可以做到:

  • 跟前一個版本的差異
  • 兩個版本的差異

比較兩個檔案之間的差異性,通常「兩個檔案的比較」指的是同一個檔案比較不同版本或不同歷史記錄。

# 是比較 working tree 跟 staging area        
git diff  

# 是比較 staging area 跟本來的 repo.
git diff --cached

# 是比較 working tree 跟本來的 repo.
git diff HEAD 

# 忽略結尾換行或空白
git diff --ignore-cr-at-eol
git diff --ignore-space-at-eol

技巧:Vimdiff 使用

Other Tools

Diffmerge,支援 Windows, Mac, Linux 的視覺 diff 工具。

Linux

設定參考網頁:How to setup Git to use Diffmerge

設定比對的方法:

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd 'diffmerge "$LOCAL" "$REMOTE"'
git config --global merge.tool diffmerge
git config --global mergetool.diffmerge.cmd "diffmerge --merge --result=\$MERGED \$LOCAL \$BASE \$REMOTE"
git config --global mergetool.diffmerge.trustExitCode true

diff 操作:

# [目前版本] 與 [目前修改] 作比較,沒有差異的話就不會顯示訊息
git difftool <file>

# [該 branch 版本] 與 [目前修改] 作比較
git difftool <branch> <file>

# [branch1 版本] 與 [branch2 版本] 作比較
git difftool <branch1>..<branch2> <file>

如果遇到衝突需要解決的時候,下這個指令:

git mergetool

Mac

設定參考網頁:Using DiffMerge as your Git visual merge and diff tool

設定比對的方法:

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd 'diffmerge "$LOCAL" "$REMOTE"'
git config --global merge.tool diffmerge
git config --global mergetool.diffmerge.cmd 'diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"'
git config --global mergetool.diffmerge.trustExitCode true

diff 操作:

# [目前版本] 與 [目前修改] 作比較,沒有差異的話就不會顯示訊息
git difftool <file>

# [該 branch 版本] 與 [目前修改] 作比較
git difftool <branch> <file>

# [branch1 版本] 與 [branch2 版本] 作比較
git difftool <branch1>..<branch2> <file>

如果遇到衝突需要解決的時候,下這個指令:

git mergetool

References

0%