假如我們修改viewMail.vue 文件(部分代碼)
從
//根據ID獲取詳情 getById () { let that = this; this.viewMailModal = true; this.loading = true; post('/presidentmailinfoController/selectByPrimaryKey', {id: this.viewId, initiatorType: 3}).then(res => { that.loading = false; if (res.success) { let mail = res.data // mail.content = that.formatTxt(mail.content) that.imgList = mail.fileList that.mailInfo = mail; } }); },
修改為
//根據ID獲取詳情 getById () { let that = this; this.viewMailModal = true; this.loading = true; // post('/presidentmailinfoController/selectByPrimaryKey', {id: this.viewId}).then(res => { post('/presidentmailinfoController/selectByPrimaryKey', {id: this.viewId, initiatorType: 3}).then(res => { that.loading = false; if (res.success) { let mail = res.data // mail.content = that.formatTxt(mail.content) that.imgList = mail.fileList that.mailInfo = mail; } }); },
就在post 位置 多加了 一行注釋和 多加了一個字段 initatorType 字段 ,好吧這不重要,我只是不行寫簡單的例子了,直接用的項目中的代碼作為例子。。我們記住區別就行了。
修改完畢后我們打開 git 命名行。
運行命令 git status 查看我們 工作區的修改的文件
git 告訴我們 一個viewMail.vue文件修改了。但是沒有告訴我們這個文件里 具體修改了哪些內容。此時git diff 就排上的用場。 他可以用於比較現在 工作區(未提交到暫存區) 與 暫存區(已經通過 git add 和 git commit 提交了)。具體的修改變化。
下面我們來運行一下 git diff 命名。查看一下變化。
具體的變化就一目了然了,git 告訴我們 刪除了紅色行 ,新增了 綠色 行的代碼。這正是我們的修改。
其實此時運行的 git diff 相當於 git diff HEAD (HEAD 指向的是 local repository 中最新提交的版本)。
我們再來看一下運行 git diff HEAD
兩次的運行結果是一樣的。我們再來看一下git diff 的簡單說明:
git diff:是查看 workspace(工作區) 與 index(暫存區) 的差別的。
git diff --cached:是查看 index(暫存區) 與 local repositorty(本地倉庫) 的差別的。
git diff HEAD:是查看 workspace 和 local repository 的差別的。(HEAD 指向的是 local repository 中最新提交的版本)
注:git diff 后跟兩個參數,如果只寫一個參數,表示默認跟 workspace中的代碼作比較。git diff 顯示的結果為 第二個參數所指的代碼在第一個參數所指代碼基礎上的修改。如,git diff HEAD 表示 workspace 在 最新commit的基礎上所做的修改
附:git 的 四個工作區(來源:https://www.cnblogs.com/qdhxhz/p/9757390.html)
由上圖可以看出,通常情況下, 當我們運行的 git add . ,是將工作區(workspace)的代碼提交到了暫存區(index)中,然后我們經常運行的 git commit -m “修改代碼提交說明”
是將暫存區中的代碼提交到了本地倉庫(local Repository)中。再往后就是我們通過 git push 將本地倉庫的代碼提交到遠程倉庫了(這里不多說了,主要說比較版本區別)。
這樣就可以解釋與git diff 和 git diff HEAD 的運行結果一樣的問題了:
雖然說 git diff 是 比較 的工作區 與 暫存區 的區別,git diff HEAD 比較的是 工作區和 本地倉庫的 區別。
但是有一點是,我在修改 代碼前已經 運行過來 git add . 和 git commit -m "。。。" 命令了。所以 暫存區的 內容和 本地倉庫的內容是一樣的。
運行完后通過 git status 查看狀態。已經告訴我沒有要提交 的東西了。
所以運行 git diff 和 運行 git diff HEAD 的命令 結果是一樣的。
下面我們再來看一下如果已經把工作區(workspace)中的代碼提交到了暫存區(index)和本地倉庫(local Repository)中怎么查看與上一個版本的區別。
運行如下命令進行提交:
提交完畢后查看是否還有要提交的內容
好的,已經提示沒有要提交的內容了。
下面我們再來查看一下運行 git diff 和 git diff HEAD 看是否還有效果:
可以看出這兩個命令已經沒有輸出的東西了。
相信認真看完上面內容的你,已經知道為什么了。因為此時 工作區(workspace)和 暫存區(index)、本地倉庫(local Repository)的最新版本代碼 都是一樣的了。所以已經比較不出東西了。
那么此時我們想看這一版本的代碼和上一版本的代碼區別,就得使用 git diff HEAD^ 我們知道到 HEAD 代碼 本地倉庫的最新版本, 那么上最新版本的上一個版本就用 HEAD^ 表示, 依次類推 那么最新版本的 上一個版本的上一個版本就是 HEAD^^
那么問題來了,我們如果我們比較的版本比較久遠,就會寫好多 ^^^...... 很麻煩,也容易把自己寫暈。所以git 還有另一種寫法 git diff HEAD~X X 代表^ 的個數。 即: git diff HEAD~1 代表最新版本的上一個版本。 git diff HEAD~2 代表最新版本的上一個版本的 上一個版本。
下面我們來運行一下(看一下當前最新版本與上一個版本的區別)
很完美的展現了我們修改的代碼。
我們再用 git diff HEAD~1 來查看一下。
結果是一樣的。
這就是git diff 的一些簡單用法。具體用法請見官網。https://git-scm.com/docs/git-diff
附:
參考文章:
git: 提交前查看修改 git diff,HEAD^, HEAD~i
https://blog.csdn.net/GW569453350game/article/details/46998395
【Git】(1)---工作區、暫存區、版本庫、遠程倉庫
https://www.cnblogs.com/qdhxhz/p/9757390.html
git diff的最全最詳細的4大主流用法:
https://blog.csdn.net/wq6ylg08/article/details/88798254