簡體   English   中英

git-如何顯示相對於當前分支創建的已更改文件列表

[英]git - how to show list of changed files relative to creation of current branch

我需要能夠看到自創建當前分支以來已進行任何修改的文件列表,無論是提交的還是暫存的或只是在樹中進行了更改。

我的情況是(按時間順序)

1.  clone branch master from remote master
2.  make various changes,  adds and commits in my local master
3.  git branch myisolatedbranch
4.  git checkout myisolatedbranch
5.  make various changes,  adds and commits in myisolatedbranch
6.  git push --all  
             (creates myisolated branch in remote) 
             (don't know if this step 6 is relevant)
7.  make various changes,  adds and commits in myisolatedbranch
  1. 現在-我想看到一個簡單的文件列表,這些文件現在在工作樹中與在時間4時的工作樹相比有所不同。即,我在myisolatedbranch中進行了哪些更改(不僅是提交而且有任何更改)

純git狀態告訴我所有與時間1相比不同的文件列表,即myisoatedbranch和master的總和中有什么不同,這也包括我在時間2更改的所有內容,這是我不想刪除的許多文件看着。

根據git status的手冊頁,有一個可選的位置參數

[<pathspec>…​]

這可能可以幫助我-但令人沮喪的是,手冊頁沒有任何關於此參數作用的說明。 (所以我的第二個問題是,此參數在此上下文中到底是做什么的?)

還是我應該嘗試git log? 但是我認為報告只是提交。

在Git中,分支(或更確切地說是分支名稱 )實際上幾乎沒有。 Git對它們的創建或任何歷史一無所知。 它們或者現在存在,在這種情況下,它們指向(一個,單個)提交,或者它們現在不存在,僅此而已。 1個

另一方面,提交是永久的(有一些例外,因為否則您將永遠無法進行臨時提交,而Git進行了大量的臨時提交)。 與提交,這是永久性的問題,只要他們到達 -a概念,需要大量的定義,所以我會忽略的時刻2 -is他們的名字是非常不友好的。 例如,考慮提交7446b8fa5ead8ce0990e8f2be3a2490eac8e199f

什么在所有的名字是gitty 7446b8fa5ead8ce0990e8f2be3a2490eac8e199f

好吧,您實際上可以在Google上搜索它:它是Git版本2.9.0,位於Git本身的Git存儲庫中。 但是“ v2.9.0”是一個友好的名稱。 而且, v2.9.0是在Git倉庫的Git的標簽 ,而標簽(並記住你和我)大丑7446 bqhatevwr

如果您想記住一個特定的提交,這就是您想要的,因為您想將當前版本與“我試圖記住的那個特定的提交,無論它的丑陋的SHA-1哈希值是什么”進行比較,則標記為你想要什么。 給該提交標簽,然后只要您想說“告訴我有關您記得的提交”,就可以將該標簽名稱提供給Git。


1關於這一點的怪異之處(即分支名稱僅指向一個分支提示的提交)實際上是非常有用的 Git的工作方式是,當您在分支上並進行新的提交時,Git使新的提交將上一個分支提示作為其父提交,然后使分支名稱指向新的提交。

因此,通過大量的努力(Git自動執行),有可能從任何分支提示的提交開始,並為該提交之前的每個提交建立圖表。 請注意,這會告訴你一切關於所有這些承諾除了自己什么他們的名字 ,回來時,這些提交作了。 根據定義,分支名稱始終在變化。 這就是為什么我們擁有標簽名稱的原因,而Git從來不會對其進行更改。 如果您將它們保留在周圍,它們將為提交提供明智的名稱(無論如何,對於“明智”的某些值,完全取決於您自己提出好名字的能力)。

2最后,可到達的概念歸結為使用分支和標記名之類的東西作為提交圖的網關。 一旦在該圖中擁有一個對象的龐大丑陋哈希值,就可以使用現在已知的提交獲取父提交ID,以查找更多提交。 然后,您可以使用那些提交ID查找更多的父ID,直到在圖中找到每個提交為止。 (沿着這些路徑查找對象,並使用樹木查找blob對象的方法。帶注釋的標簽也有標記對象。帶注釋的標記只是指向此類對象的標記名稱。標記對象指向帶標簽的提交,而不是使標簽直接指向提交。使用輕量級標簽 ,標簽名稱直接指向提交。)

實際上存儲在Git的對象數據庫中(包含存儲庫的.git目錄中)但上述方法無法訪問的任何對象(提交,標簽,樹或Blob)都被標記為通過git gc進行垃圾回收 因此,可以隨時隨地進行臨時提交,其中包括一些額外的保證,例如“對象徘徊14天”和“大多數名稱都有reflog”等等,這樣至少可以使它們可訪問一個月,或者暫時保護它們免受死神的傷害-然后,如果您最終決定喜歡它們,請給它們提供外部名稱,例如分支和/或標簽名稱。 如果您決定討厭它們,只需放棄它們,最終git gc就會獲得它們並為您收回磁盤空間。

使用git diff --name-only master來顯示文件列表(或者您可以使用--stat標志來顯示每個文件的更多統計信息)。 這將顯示當前工作樹與您離開master的最后一個位置(在您的示例中為4)之間的所有差異文件。 在這里查看更多。

關於git statuspathspec它只是過濾輸出以僅顯示特定目錄中的文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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