[英]How can I find files what I need in branch what I choose in git?
在git中,我要查找文件,我要選擇一個分支。 例如,看看下面。
git diff --name-status comitaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..comitbxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
M fileA.txt // it was changed in xxx branch.
M fileB.txt // it was changed in yyy branch.
M fileC.txt // it was changed in zzz branch.
如果我想找到 fileB.txt,我該如何使用 git 命令?
在 Git 中的分支中不會更改文件。 事實上,文件甚至不存儲在分支中。 文件存儲在commits 中。
你可能想知道在 Git 中什么是好的分支。 你可能覺得奇怪,因為分支機構是不是真的都在多好Git的,雖然這取決於如何,究竟你定義的分支,因為這個詞本身分公司是模糊的,在Git中。 有一個更好定義的術語,分支名稱,您可能想要使用它。 在 Git 中,分支名稱的作用是允許您和 Git查找提交。 這樣做的原因是提交的真實名稱是一個大的、丑陋的、隨機的數字,以十六進制表示,人類無法記住或處理。
git diff --name-status xxx..yyy
注意:這與以下含義相同:
git diff --name-status xxx yyy
這里的xxx
和yyy
是提交哈希 IDs ,或者解析為提交哈希 ID 的東西,例如分支名稱。 Git 需要這些,以便它可以找到兩個特定的提交。
Git 然后提取兩個提交。 每個提交都保存每個文件的完整快照,因此這會生成兩個不同的快照。 Git 然后比較兩個快照:
yyy
存在,在xxx
丟失)或被刪除(在xxx
存在,在yyy
丟失)。xxx
) 副本,將生成右側( yyy
) 復制。 1我說通常是因為有很多極端情況,例如,-- --name-only
,狀態被丟棄,或重命名檢測,其中左側丟失的文件與新創建的文件相匹配在右側,作為重命名操作。
M fileA.txt // it was changed in xxx branch. M fileB.txt // it was changed in yyy branch. M fileC.txt // it was changed in zzz branch.
這里的注釋想象了一些根本找不到的東西: M
只是意味着這三個文件存在於左右提交中,但內容不同。
任何一個提交都可以存在於多個不同的分支中。 每次提交都會保存每個文件的完整快照,因此在提交中不會更改任何文件。 文件在兩次提交之間更改,或者在這兩次提交之間不更改。
但與此同時,每個提交也包含說明哪些特定提交哈希 ID 是該提交的直接前驅的信息。 因此,如果我們有一串提交,全部排成一行,如下所示:
... <-F <-G <-H
我們可以讓 Git 從提交H
開始並反向工作:
首先,我們讓 Git 使用 commit H
來定位 commit G
,並比較兩個快照。 對於這兩次提交中不同的文件,我們聲稱這些文件在提交H
中發生了更改。 這只是一種看待事物的方式——commit H
純粹是一個快照,而不是更改,但是通過將它與之前的快照進行比較,我們可以將其視為更改。
然后,我們讓 Git 再次使用 commit H
來定位 commit G
,但這次我們現在考慮單獨提交G
它有一個較早的提交F
記錄,所以我們讓 Git 使用G
來定位F
並比較兩個快照。 無論有什么不同,我們都聲稱“在G
發生了變化”,就像以前一樣。
當然, G
的父提交F
也是一個普通的提交,有一些更早的提交(大概是E
)。 我們一遍又一遍地重復這個過程。
如果這三個提交僅通過從分支名稱feature
開始找到,則人們聲稱這些文件已“在分支feature
更改”:
A--B--C <-- main
\
D--E--F--G--H <-- feature
但這里的大約GIT中分支名稱奇怪的事情:我們可以創建並隨時消滅他們。 現在讓我們創建一個名稱zorg
並使其指向提交G
:
A--B--C <-- main
\
D--E--F--G <-- zorg
\
H <-- feature
此存儲庫中的提交集未更改。 所有提交都被永久凍結:任何提交的任何部分都不能改變。 所以提交F
和G
之間的變化,我們剛才說的是feature
分支的變化......好吧,它們仍然存在,在F
和G
之間,但現在它們是zorg
變化。
這意味着除非你也保持分支名稱固定(Git 故意不這樣做),否則你不能說某些更改是由於某些branch 。 這僅僅是由於一些commits 。 不問分行; 詢問提交。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.