我已經提交并將一些檔案推送到遠程分支并創建了一個合并請求。我用了
git commit -a -m "blah blah"
git push
所以它推送了所有修改過的檔案。不應推送其中一個檔案(例如可執行檔案)。如何從合并請求中洗掉此檔案?我明白我需要把它放進去.gitignore,這樣將來就不會發生這種情況。但現在我需要從當前合并請求中洗掉該檔案。我發現這個頁面提到了以下命令
git rm {filename} --cached
git commit -m "[...]"
git push
我嘗試了這些命令,但在 Gitlab 的合并請求中沒有看到洗掉的檔案。這是正確的方法嗎?
uj5u.com熱心網友回復:
你用的是哪個版本的 Gitlab?
剛剛用最新版本(14.5.2)測驗過:
git checkout -b feature-123
git add package.json package-lock.json
git commit -m 'Commit with extra file.'
git push --set-upstream origin feature-123
創建 MR,它顯示兩個檔案已更改
現在,來自同一個分支:
git rm --cached package-lock.json
git commit -m 'Removing extra file.'
git push
MR 現在只顯示一個修改過的檔案。
但是如果這個 MR 在沒有壁球的情況下被接受,git 歷史將包含添加和洗掉一個額外的檔案。
如果您提交了一個非常大的檔案,最好在合并之前要求維護者壓縮您的更改。或者洗掉 MR 并通過一次提交創建一個新的。
uj5u.com熱心網友回復:
合并請求(也稱為pull請求其他SCM工具)是一種正式的方式從源分支(你的)代碼審查和合并變成一個目標分支(通常是共享的分支,如main,master,develop,等)
鑒于此,有多種方法可以從合并請求中洗掉檔案,例如:
- 正如您所提議的,您可以向源分支添加一個新提交,這有效地撤消了對您不再希望包含的檔案的更改。這可能意味著撤消對現有跟蹤檔案的更改,或洗掉未跟蹤檔案。正如xy2 的回答中所指出的,添加額外提交以洗掉檔案的缺點是,除非您在完成 MR 時壓縮,否則不需要的檔案將保留在歷史記錄中。
- 通常更好的方法是從包含它們的提交中洗掉檔案。這在這個問題中有詳細描述:從 Git commit 中洗掉檔案。在您的本地分支上重寫提交以不再包含您要洗掉的檔案后,您將需要再次強制推送您的分支:
git push --force-with-lease。(注意--force-with-lease通常使用 over 是一個很好的默認設定--force。)在推送您的分支后,您的 MR 應該自動更新為您的分支的最新版本,其中不包括檔案。
旁注:盡管我個人傾向于選項 #2,但您所描述的選項 #1 的嘗試在概念上應該有效。我懷疑您并沒有完全按照您認為對您的分支機構所做的事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/378113.html
