我對 git 很陌生,我想嘗試了解更多關于 github 如何在線顯示分支的資訊。
我創建了一個包含大約 50 個檔案的 repo。
我在本地克隆了該存盤庫,創建了一個新分支,添加了一個沒有其他更改的檔案。然后我將更改推高。到現在為止還挺好。
然而,當我進入github并切換到分支時,我看到了我的新檔案,但我也看到了其他50個檔案,我沒有改變。
那有意義嗎?即 github 是否顯示了 master branch 的完整視圖?
當我切換到那個分支時,我只希望看到我添加的檔案。
現在,當我從 repo 創建分支時,我沒有洗掉我沒有處理的檔案,而是留下了它們并添加了一個新檔案。那會是正確的流程嗎?或者我應該洗掉檔案以免發生上述情況?
任何幫助,將不勝感激。
謝謝。
uj5u.com熱心網友回復:
這并不是關于 Github 如何顯示存盤庫,甚至 git 是如何作業的,而是關于版本控制的目的是什么。
讓我們來看看你的描述,讓它不那么抽象:
我創建了一個包含大約 50 個檔案的 repo。
在現實世界中,這 50 個檔案意味著什么。通常,它們是某個應用程式的 50 個源代碼檔案,您需要所有這些檔案才能使應用程式按預期作業。
我在本地克隆了該存盤庫,創建了一個新分支,添加了一個沒有其他更改的檔案。然后我將更改推高。到現在為止還挺好。
分支是跟蹤應用程式特定更改的一種方式。因此,您的新檔案可能是應用程式的某些新功能 - 可能是游戲的新級別。通常,更改實際上會比這小得多 - 您可以通過編輯現有 50 個檔案之一中的一行來修復錯誤。
然而,當我進入github并切換到分支時,我看到了我的新檔案,但我也看到了其他50個檔案,我沒有改變。
僅包含您的新關卡的分支不會很有用 - 如果沒有游戲的其余部分,關卡將不會做任何事情。所以分支必須包含整個應用程式,包括新檔案。一個分支只包含您更改的一行就更沒有意義了。
那有意義嗎?即 github 是否顯示了 master branch 的完整視圖?
不,Github 顯示了更改后應用程式的源代碼,即 51 個檔案。如果您洗掉了原始 50 個檔案中的一個,它將顯示該分支包含 49 個檔案。您可以完全洗掉 master 分支,而您的另一個分支仍將包含所有 51 個檔案。
當我切換到那個分支時,我只希望看到我添加的檔案。
如果要查看對特定任務所做的更改,則需要比較兩個分支 - 您想要的任意兩個分支,因為它們都是同一應用程式的版本。在您的情況下,如果您將 master 與新分支進行比較,您將看到一個添加的檔案。如果您改為更改一行,差??異查看器將顯示您更改的特定行。
現在,當我從 repo 創建分支時,我沒有洗掉我沒有處理的檔案,而是留下了它們并添加了一個新檔案。那會是正確的流程嗎?或者我應該洗掉檔案以免發生上述情況?
如果您的應用程式需要這 50 個檔案才能運行,您就不想洗掉它們,否則您的應用程式將無法運行。洗掉檔案是您希望在版本控制中像任何其他更改一樣跟蹤的更改 - 使用我之前的示例,您可能會洗掉一個難以完成的級別。
希望在像這樣的現實生活場景中考慮它會使發生的事情更清楚一些。git 在特定的歷史模型中的復雜性要高得多,但在開始研究之前,您需要了解版本控制的基本目標。
uj5u.com熱心網友回復:
您可以使用的是 git filter-branch 命令。此命令允許您將過濾器應用于分支。
例如,您可以使用以下命令將一個子目錄過濾到您的分支中:
git filter-branch --subdirectory-filter foodir -- --all
使用此命令要非常小心,因為它有很多陷阱,可能會對預期的歷史重寫產生不明顯的破壞。
uj5u.com熱心網友回復:
你寫道,“我對 git 很陌生……”
歡迎使用 Git!起初,這是關于創建分支意味著什么的常見誤解。可能有無數種方法可以解釋這一點,以下是其中的兩種:
當您“創建新分支”時,您并不是在種植新樹。您只是準備將新提交添加到現有樹中并為其命名,以便以后更容易找到它們。
或者,
當您“創建新分支”時,您實際上是在創建書簽或指向特定提交的指標。例如,如果您在分支上
main并發出命令:git branch my-new-branch那么您將有兩個分支指向同一個提交。此時,當您在它們之間切換時,它們將具有相同的內容,直到您在其中一個分支上進行新的提交。
請注意,git reset您可以使用該命令更改分支名稱指向的提交。所以分支基本上只是一種方便,所以你不必記住長提交 ID 哈希。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/313267.html
下一篇:我試圖在${body.email}中加入constdata=。簡單地說,它是用來發送電子郵件的,同時只需在前面輸入
