簡體   English   中英

如何在我在 git 中選擇的分支中找到我需要的文件?

[英]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

這里的xxxyyy提交哈希 IDs ,或者解析為提交哈希 ID 的東西,例如分支名稱。 Git 需要這些,以便它可以找到兩個特定的提交。

Git 然后提取兩個提交 每個提交都保存每個文件完整快照,因此這會生成兩個不同的快照。 Git 然后比較兩個快照:

  • 如果某個文件在兩個快照中,並且在兩個快照中都相同,則 Git 對那個文件一無所知。
  • 如果某個文件只存在於兩個快照之一中,Git 會——通常是1——告訴你該文件是被創建的(在yyy存在,在xxx丟失)或被刪除(在xxx存在,在yyy丟失)。
  • 如果文件在兩個快照中都存在,Git 將(再次,通常)告訴您該文件已被修改,並向您顯示一些更改,如果應用於左側 ( 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

此存儲庫中的提交集未更改。 所有提交都被永久凍結:任何提交的任何部分都不能改變。 所以提交FG之間的變化,我們剛才說的是feature分支的變化......好吧,它們仍然存在,在FG之間,但現在它們是zorg變化。

這意味着除非你也保持分支名稱固定(Git 故意不這樣做),否則你不能說某些更改是由於某些branch 這僅僅是由於一些commits 不問分行; 詢問提交

暫無
暫無

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

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