簡體   English   中英

如何顯示分支中更改的文件列表

[英]How to show the list of of files changed in a branch

git中有沒有辦法顯示整個分支中正在更改的文件列表?

我找到了關於展示如何列出提交中的所有文件的帖子:

如何列出提交中的所有文件?

有沒有辦法為分支中的所有提交做到這一點? 以及如何列出分支中的所有提交?

謝謝你。

正如Mitchel Paulin 所指出的,提交持有快照,而不是更改。 您必須選擇兩個快照並讓 Git 對它們進行比較,然后才能找到任何差異。 把這看作是一個差異難題:每個提交快照都是您源的完整圖片,您必須先放兩張圖片才能看到不同之處。

您鏈接的問題,如何列出提交中的所有文件? , 有很多答案,但沒有一個人注意到每個提交實際上包含兩件事:快照加上一些元數據。 那是:

  • 每個提交都有編號。 這些數字是大而難看的哈希 ID——它們看起來像隨機的字母和數字字符串——但它們實際上是數字。 每個提交都有自己的唯一編號。 (它們實際上是加密校驗和。)

  • 每個提交存儲每個文件的完整快照——不是更改,是快照。 每個提交中的文件一直被凍結,為了節省空間,在所有提交中都進行了重復數據刪除(因為許多提交與許多其他提交共享大部分文件),但每個提交都有一個完整的副本。

  • 每個提交都會存儲一些元數據,例如提交人的姓名和電子郵件地址。 但是,這些元數據項之一是前一次提交的提交編號。 Git 將此稱為提交的父級

這些父鏈接意味着 Git 實際上是反向工作的。 也就是說,一個分支只是一個以特定提交結束的提交鏈:

... <-F <-G <-H

這里H代表鏈中最后一次提交的丑陋的大哈希 ID。 在提交H ,Git 存儲了先前提交G的哈希 ID。 我們說GH的父級,或者說H指向G

當您讓 Git 向您展示某些提交(例如提交H發生的更改時,Git 實際上是同時提取G的快照H的快照,然后比較它們。 有什么不同,那就是改變了。 如果您只想要更改文件的名稱,這對 Git 來說特別容易,因為它使用了重復數據刪除技巧。

但這也導致了您問題另一部分的答案:

有沒有辦法為分支中的所有提交做到這一點? 以及如何列出分支中的所有提交?

如果H是提交鏈中的最后一次提交,並且H指向G ,則G是向后的下一次提交。 Git 因此可以使用H找到G

同時,提交G持有其父F丑陋大哈希 ID,因此 Git 可以使用G找到F 這讓 Git 又后退了一步。

F也持有母公司的哈希ID,所以從F ,Git的可退一步到下一個井,以前-commit。

這正是git log所做的:它從最后開始,然后向后工作。 幾乎所有的 Git 都做同樣的事情,反向工作。

masterbranch1這樣的分支名稱只包含最后一次提交的哈希 ID。 當您向分支添加新提交時,Git 會立即將新提交的哈希 ID 存儲到分支名稱中,現在新提交是最后一次提交。

不過還有一個棘手的問題:

             I--J   <-- branch1
            /
...--F--G--H
            \
             K--L   <-- branch2

兩個分支中的哪一個是通過H向上提交的?

Git 的回答是:它們在兩個分支上 事實上,在真正的存儲庫中,大多數提交都在大多數分支上。 例如,從branch2運行git log將從L開始,移回K ,移回H ,移回G ,依此類推,一直回到存儲庫中時間的最開始。

當有人詢問某個分支上的所有提交時,他們幾乎總是不是真正的意思。 它們幾乎總是指在某個分支上,向后,直到我認為 Git 應該提前停止的某個點 Git 讓你明確地告訴它在哪里停止。 這就是git log branch1..branch2語法的git log branch1..branch2 :它表示通過從branch2向后工作找到的提交,但排除通過從branch1向后工作找到的提交 在這里,這將僅提交KL ,從L開始並返回到K 下一次提交branch1 - H - 在branch2 ,但它也在branch1 ,我們告訴 Git 忽略所有branch1提交,這樣就branch1HG ,以及它們之前的所有內容。

改變只有在相對於其他事物時才有意義。 例如,您可以使用以下git log branch1..branch2對某個分支(比如 master)進行git log branch1..branch2

或者git diff --name-status branch1..branch2

暫無
暫無

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

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