我洗掉了一些檔案,它們在拉取請求中顯示為已洗掉(請參見下圖)
我怎么能沒有拉取請求中的檔案?(也沒有洗掉)

uj5u.com熱心網友回復:
我不需要它們,因為它們是自動生成的。他們在 .gitignore
如果它們以前被跟蹤過,您的 PR 會記錄它們不再被跟蹤的事實(因此被洗掉),并被忽略(git check-ignore -v -- a/generated/file應該在本地回傳“忽略”規則)
換句話說,這是意料之中的。
uj5u.com熱心網友回復:
在 Git 中,每次提交都是每個檔案的完整快照。
更準確地說,每次提交都包含一個完整的快照。無論里面有什么檔案,這些都是檔案。
提交之間沒有區別。提交是單個檔案集合,外加一些元資料。因此,要求提交之間的差異就像要求自由女神像之間的差異。
現在,我們可以問問紐約金融區的自由女神像和喬治華盛頓雕像之間的區別。或者,也許更明智的是,我們可以詢問金融區的喬治華盛頓雕像與聯合廣場的雕像之間的區別。但我們不得不選擇兩件事要問。提交也是如此:我們不能在不選擇兩個提交的情況下詢問差異。
不過,這就是拉取請求的作用。當您使用 GitHub 發出 Pull Request 時——PR 是 GitHub 功能,而不是 Git 功能——GitHub 會選擇兩個提交進行比較。您看到的差異是比較這兩個提交的結果。兩次提交之一是分支的提示提交;另一個是在 GitHub 稱為base branch的提交。(由于 Git 沒有這個,我們必須在 Git 中做一些不同的事情,但我們可以在那里獲得相同的效果。)
如果 PR 說這些檔案已洗掉,則意味著:
- 該檔案確實存在于基本提交中。
- 該檔案不存在于 pull-request-branch-tip 提交中。
如果你想要的檔案不被洗掉,你必須做出一個新的分支尖承諾在這些檔案做存在。那么它們就不會被“洗掉”。相反,他們將在該提交中。
現在,一旦您進行了一些提交,就永遠無法更改該提交。所以你不能改變 PR 中現有的分支提示提交。但你并不需要做那。在 Git 中,分支名稱始終表示此分支上的最新提交。如果您添加更多提交,它們現在是最新的提交。因此,您可以向將檔案放回的分支添加新提交。現在分支提示提交有檔案。或者,您可以從 branch 剝離提交。這有點困難:Git 旨在添加提交,而不是洗掉它們。(將它們從樹枝的尖端剝離并不會去除提交要么:它只是使分支名稱定位一些較早的提交。)
所有這些替代方案都不適合您的情況
你在評論中說——我在這里稍微解釋一下——這些檔案不應該提交,因為它們是自動生成的。
現在,事實是,他們有一些承諾。這個事實是不可改變的,因為那些提交是無法改變的。您最多可以停止使用這些提交,要么保留它們以免損壞您的提交歷史記錄,要么將它們剝離以使其很難被發現以至于沒有人會使用它們(故意破壞歷史記錄,換句話說)。將檔案排除在新提交之外。
任何 PR 都會將它們顯示為已洗掉,因為它們是通過比較洗掉的。也就是說,一個git checkoutorgit switch --detach到舊提交提取檔案:它們在舊提交中。隨后git checkout或git switch到新的提交,然后將洗掉這些檔案。
由于它們是自動生成的,因此洗掉它們是無害的。(如果它不是無害的,它們就不會正確自動生成,也許它們不應該被洗掉。)
洗掉檔案并提交可能是正確的做法,它會顯示為洗掉,這也是正確的。就這樣吧。之后列出檔案.gitignore將有助于確保它們不會出現在未來的提交中,但確實有一兩個小缺點。你可能不會遇到它。
如果自動生成的檔案很慢,考慮增加一個特殊分支,一些特殊提交確實有他們,讓他們根據需要不時更新,讓人們運行。該分支可以包含只生成的檔案,因為人們會用填充他們的作業樹(而不是它們的指數/舞臺區)。git restore branch -- path/to/generated/filesgit restore
uj5u.com熱心網友回復:
如果這些檔案對您的存盤庫很重要,那么在添加、洗掉、修改它們時將它們列在拉取請求中是有意義的。如果您不希望那樣,這可能意味著您的檔案不是那么重要,那么您可以將它們添加到.gitignore檔案中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/349145.html
上一篇:還原合并的拉取請求
