P4Merge
P4Merge是Git的一個第三發Diff和Merge工具(視覺化衝突解決工具).
下載地址: https://www.perforce.com/downloads/visual-merge-tool
安裝的時候只需要勾選p4merge即可:
然後需要把p4merge的路徑新增到環境變數PATH裡面.
這樣操作後, 就可以通過命令列啟動p4merge了:
配置p4merge作為Git的diff tool:
git config --global diff.tool p4merge
git config --global difftool.p4merge.path "C:\Program Files\Perforce\p4merge.exe"
因為每次使用diff tool的時候, git會彈出確認框, 我們最好把這個確認框從全域性範圍內預設不啟用:
git config --global difftool.prompt false
配置p4merge作為git的merge tool:
git config --global merge.tool p4merge git config --global mergetool.p4merge.path "C:\Program Files\Perforce\p4merge.exe" git config --global mergetool.prompt false
最後檢查一下全域性配置:
git config --global --list
OK.
下面準備一個專案, 現在的專案狀態是:
新增一個README.md, 然後add並commit.
然後修改README.md 然後add
然後再修改README.md:
git status告訴我這個檔案被修改了, 但是沒有告訴我哪裡被修改了.
為了知道更多的細節, 這裡就需要使用 git diff命令了.
不加任何引數的情況下, 該命令
比較的是working directory裡面, 被stage的變化 vs 沒被stage的變化:
如果變化太多了顯示不下, 想要退出的話, 就按q就行.
因為我配置了git difftool, 所以也可以使用 git difftool這個命令:
這就會彈出p4merge這個視覺化工具, 可以清楚的看到變化.
左邊的是stage的, 右邊的是沒有stage的.
比較working directory和最後一次commit:
git diff HEAD.
下面使用視覺化的difftool: git difftool HEAD.
比較Staging 區和最後一次commit.
git diff --staged HEAD.
使用視覺化工具: git difftool --staged HEAD:
只比較一個檔案/路徑.
再修改專案的另一個檔案, 然後檢視狀態:
如果執行git diff的話, 那麼兩個檔案都會被比較:
只想比較一個檔案/路徑的話就需要加引數:
git diff -- README.md:
也可以使用視覺化工具:
git difftool -- README.md:
比較兩個commit.
先檢視歷史: git log --oneline:
git diff xxx yyy
其中xxx和yyy都表示commit的 id, 最後一次commit可以用HEAD表示.
下面這個命令比較的是HEAD 和 HEAD的上一次:
git diff HEAD HEAD^.(這個命令在windows上可能有點問題, 請使用git bash):
使用視覺化工具:
git difftool HEAD HEAD^:
HEAD^表示上一次commit, HEAD^^就表示上兩次的commit, 以此類推, 也可以使用HEAD~2的形式, 它和HEAD^^是一樣的. 也可以連著使用 HEAD^^~3就像當於HEAD^^^^^.
本地 vs 遠端.
git diff master origin/master. (origin是遠端github的引用名而已, 這個可以改.) 這就是比較本地和遠端的master分支.
同樣也可以使用視覺化工具: git difftool master origin/master:
最後git push origin master.
本文就簡單介紹了這些: p4merge, difftool, mergetool, git diff, git difftool, 各種情況的git diff.