[英]Git diff cached does nothing
這是我的位置:
如果我嘗試commit again (#3)
,則表示nothing to commit, working directory clean
。 因此,我上次肯定已經成功地做出了承諾,這就是為什么要這樣說。
當我做一個git status
我nothing to commit, working directory clean
但是當我嘗試在OS X的終端中鍵入git diff --cached --name-only
或git diff --staged
,它什么也沒做。 再次運行該命令后,我才得到命令提示符。
我在這里想念什么嗎? 我已經在git diff上搜索了東西,但我一定是瞎子。
運行git diff --cached
將顯示存儲庫和索引之間的差異(在git add
文件提交到存儲庫之前,文件由git add
暫存的位置)。 它不會查看工作目錄中的文件,也不會比較存儲庫中修訂之間的差異。
如果要查看本地存儲庫與上游存儲庫有何不同,請首先確保遠程存儲庫的本地緩存是最新的:
git remote update
然后將您的本地分支與遠程存儲庫中的相應分支進行比較:
git diff --name-only mybranch origin/mybranch
..假設您的遙控器名為origin
,可能是它的名字。
更新
如果您要推送到一個空的遠程存儲庫,那么答案是“將推送哪些文件?”。 是“所有人”,沒有什么可diff
抗衡的。
您可以運行git ls-files
來查看存儲庫中所有文件的列表。
在我之前的示例中, mybranch
將是分支的名稱,例如master
或bug/1234
或this-is-a-nifty-feature
,並且該示例假定您將本地分支推送到同名的分支在遠程存儲庫中。
更新2
您詢問:
我的遠程分支是一個url,那么uri / [repo name]是什么來源? 所以起源是尿? 我將其稱為本地分支機構的名稱嗎?
git存儲庫可以與一個或多個稱為“ remotes”的遠程存儲庫相關聯。 如果克隆遠程存儲庫:
$ git clone git@github.com:larsks/sandbox.git
您將最終得到一個引用此存儲庫的名為origin
的遠程站點:
$ cd sandbox
$ git remote -v
origin git@github.com:larsks/sandbox.git (fetch)
origin git@github.com:larsks/sandbox.git (push)
您的本地分支最初名為master
,因此您的初始推送應如下所示:
$ git push origin master
這要求git將您的本地master
分支推送到遠程存儲庫的master
分支(稱為origin
。
但是您可以使用“ git checkout -b”或“ git branch”命令創建新分支。 有很多文檔可能比我在此答案中提供的概述更好。 我將從《 The Git Book》開始。
由於一幅圖像價值1000個單詞,並且我不想重新發明輪子,所以請允許我鏈接https://git-scm.com書中的其中一個插圖,以顯示文件的生命周期在git中顯示緩存的作用。 我承認我對這張照片有些不滿意,但可以很好地達到此目的。
如果您已經進行了一些修改並且處於過渡階段(“ s語”表示“添加到緩存”),其中一些使用git add
和更細粒度的git add -p
,則命令git diff
和git diff --cached
是查看已添加到緩存的內容以及仍可以添加的內容的方法。 在這里添加,我的意思是git add
-wise,所以添加一個未跟蹤的文件,或添加一個修改。
git diff
:顯示可以使用git add
進行的修改。 請注意,這僅適用於“暫存文件”箭頭,不會列出未跟蹤的文件。 git diff --cached
: 僅顯示已上演的事物與上一次提交之間的差異。 在您的情況下, git diff --cached
顯示任何內容,因為您已經提交了暫存區域中的所有內容,並且此后未添加任何內容。
該選項被稱為--cached
的原因是因為git臨時區域最初被稱為cache
。 您還會遇到術語index
。
@larsks的回答是正確的,我只是想給出這張替代圖片,以回應他回答后的評論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.