如何从合并请求中删除跟踪文件

ont*_*cks 9 git gitlab

我已提交一些文件并将其推送到远程功能分支并创建了合并请求。我用了

git commit -a -m "blah blah"
git push
Run Code Online (Sandbox Code Playgroud)

所以它推送了所有修改的文件。其中一个文件(主文件中的现有文件)不应被推送(例如可执行文件)。如何从合并请求中删除此文件,以便当 MR 合并到 master 时,不需要的文件不会被合并(就好像它从未存在于 MR 中一样)。我发现此页面提到了以下命令

git rm {filename} --cached
git commit -m "[...]"
git push
Run Code Online (Sandbox Code Playgroud)

我尝试了这些命令,但没有看到 Gitlab 的合并请求中删除的文件。这是正确的做法吗?

更新1:

deleted通过上述命令,我可以看到上面提交中提到的文件。但是当我将更新的 MR 合并到 master 中时,该文件也会从 master 中删除。

更新2:

删除了导致混乱的句子并更新了标题

小智 9

您使用的 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
Run Code Online (Sandbox Code Playgroud)

创建MR,它显示两个文件已更改

现在,来自同一分支:

git rm --cached package-lock.json
git commit -m 'Removing extra file.'
git push
Run Code Online (Sandbox Code Playgroud)

MR 现在仅显示一个已修改的文件。

但是如果这个 MR 在没有压缩的情况下被接受,git 历史记录将包含添加和删除额外的文件。

如果您提交了一个非常大的文件,最好要求维护者在合并之前压缩您的更改。或者删除 MR 并通过一次提交创建一个新的 MR。