搜尋

首頁  >  問答  >  主體

git diff 未 commit的改動

> git init .
Initialized empty Git repository in /home/XXXXX/test/.git/
> ll
total
> touch foo
> git add foo
> git commit -m init
[master (root-commit) cdc99b4] init
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo
> echo "bar">foo
> git log
commit cdc99b4fa8cd2117015cd114bf269ab9a209e58c

Date:   Thu Jan 28 08:57:34 2016 +0100

    init

    Change-Id: If5530860db17d2242e4082666042960fc423f737
> git diff --cached cdc99b4fa8cd2117015cd114bf269ab9a209e58c
> cat foo
bar
> git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   foo
#
no changes added to commit (use "git add" and/or "git commit -a")
>

期待的結果是git diff可以輸出 bar

为情所困为情所困2794 天前604

全部回覆(3)我來回復

  • 滿天的星座

    滿天的星座2017-05-02 09:29:13

    git diff --cached

    解釋一下,git diff 对比的是 working tree 和 HEAD 之间的。而你这个应该是 git add 之后了,所以需要对比 staged 和 HEAD 之间,加 --cached 就是為了這個。


    OK,之前沒仔細看題目裡的過程,以上回答有誤,感謝 @jokester 提醒。

    接著復刻了一遍題主的過程,結果如下:

    結果就是 git diff 沒有問題,為了保障整個過程沒有疏漏所以附上的是完整截圖,題主可以對照看看問題在哪裡。

    另外我注意到題主在重新編輯foo 之後沒有git add 的情況下使用的是foo 之后没有 git add 的情况下使用的是 git diff --cached 命令,这恰恰符合我之前答案提到的(我是理解反了题目的诉求),所以不要加 --cached 命令,這恰恰符合我之前答案提到的(我是理解反了題目的訴求),所以不要加--cached 就好了。附上對比:

    回覆
    0
  • PHPz

    PHPz2017-05-02 09:29:13

    git diff不加參數就應該看到bar

    回覆
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-02 09:29:13

    你正常的git diff不行?

    回覆
    0
  • 取消回覆