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