簡體   English   中英

Git diff緩存什么都不做

[英]Git diff cached does nothing

這是我的位置:

  1. 在GitHub上創建了一個新的倉庫
  2. 在PC上本地初始化(git add)我的工作目錄
  3. 提交(git commit -m)所有更改到階段
  4. 通過添加新的.png文件進行了另一項更改
  5. 做了另一個git commit -m
  6. 現在,我想查看所有已暫存文件的列表,這些文件將在我第一次(或實際上在任何時候)實際將其推送到遠程倉庫(https //.../../)之前被推送。 所以我假設會有2次提交充滿更改以顯示

如果我嘗試commit again (#3) ,則表示nothing to commit, working directory clean 因此,我上次肯定已經成功地做出了承諾,這就是為什么要這樣說。

當我做一個git statusnothing to commit, working directory clean

但是當我嘗試在OS X的終端中鍵入git diff --cached --name-onlygit 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將是分支的名稱,例如masterbug/1234this-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 diffgit 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM