天天看點

Git - 使用指令和P4Merge進行diff

P4Merge

P4Merge是Git的一個第三發Diff和Merge工具(可視化沖突解決工具).

下載下傳位址: 

https://www.perforce.com/downloads/visual-merge-tool

安裝的時候隻需要勾選p4merge即可:

Git - 使用指令和P4Merge進行diff

然後需要把p4merge的路徑添加到環境變量PATH裡面.

這樣操作後, 就可以通過指令行啟動p4merge了:

Git - 使用指令和P4Merge進行diff

配置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      
Git - 使用指令和P4Merge進行diff

OK.

下面準備一個項目, 現在的項目狀态是:

添加一個README.md, 然後add并commit.

然後修改README.md 然後add

然後再修改README.md:

Git - 使用指令和P4Merge進行diff

git status告訴我這個檔案被修改了, 但是沒有告訴我哪裡被修改了.

為了知道更多的細節, 這裡就需要使用 git diff指令了.

不加任何參數的情況下, 該指令

比較的是working directory裡面, 被stage的變化 vs 沒被stage的變化:

Git - 使用指令和P4Merge進行diff

如果變化太多了顯示不下, 想要退出的話, 就按q就行.

因為我配置了git difftool, 是以也可以使用 git difftool這個指令:

Git - 使用指令和P4Merge進行diff

這就會彈出p4merge這個可視化工具, 可以清楚的看到變化.

左邊的是stage的, 右邊的是沒有stage的.

比較working directory和最後一次commit:

git diff HEAD.

Git - 使用指令和P4Merge進行diff

下面使用可視化的difftool: git difftool HEAD.

Git - 使用指令和P4Merge進行diff

比較Staging 區和最後一次commit.

git diff --staged HEAD.

Git - 使用指令和P4Merge進行diff

使用可視化工具: git difftool --staged HEAD:

Git - 使用指令和P4Merge進行diff

隻比較一個檔案/路徑.

再修改項目的另一個檔案, 然後檢視狀态:

Git - 使用指令和P4Merge進行diff

如果執行git diff的話, 那麼兩個檔案都會被比較:

Git - 使用指令和P4Merge進行diff

隻想比較一個檔案/路徑的話就需要加參數:

git diff -- README.md:

Git - 使用指令和P4Merge進行diff

也可以使用可視化工具:

git difftool -- README.md:

Git - 使用指令和P4Merge進行diff

比較兩個commit.

先檢視曆史: git log --oneline:

Git - 使用指令和P4Merge進行diff

git diff xxx yyy

其中xxx和yyy都表示commit的 id, 最後一次commit可以用HEAD表示.

Git - 使用指令和P4Merge進行diff

下面這個指令比較的是HEAD 和 HEAD的上一次:

git diff HEAD HEAD^.(這個指令在windows上可能有點問題, 請使用git bash):

Git - 使用指令和P4Merge進行diff

使用可視化工具:

git difftool HEAD HEAD^:

Git - 使用指令和P4Merge進行diff

HEAD^表示上一次commit, HEAD^^就表示上兩次的commit, 以此類推, 也可以使用HEAD~2的形式, 它和HEAD^^是一樣的. 也可以連着使用 HEAD^^~3就像當于HEAD^^^^^.

本地 vs 遠端.

git diff master origin/master. (origin是遠端github的引用名而已, 這個可以改.) 這就是比較本地和遠端的master分支.

Git - 使用指令和P4Merge進行diff

同樣也可以使用可視化工具: git difftool master origin/master:

Git - 使用指令和P4Merge進行diff

最後git push origin master.

本文就簡單介紹了這些: p4merge, difftool, mergetool, git diff, git difftool, 各種情況的git diff.

下面是我的關于ASP.NET Core Web API相關技術的公衆号--草根專欄:

Git - 使用指令和P4Merge進行diff

繼續閱讀