1

我有一个配置文件abc.cfg,其中包含我的环境的本地更改。为了防止将本地配置推送到远程,我git update-index --skip-worktree abc.cfg在文件上使用。

现在上游已经abc.cfg随着我需要的全局更新而改变。所以我首先做了--no-skip-worktree abc.cfg,做git stash了,拉了上游,然后继续处理git stash apply文件。

现在有合并冲突abc.cfg。我试图解决它,然后再做git update-index --skip-worktree abc.cfg一次,但这次它说:

fatal: Unable to mark file scripts/app.js

我应该如何应用我的本地更改而不将其包含在提交中?

4

2 回答 2

0

现在有合并冲突abc.cfg
我试图解决它,然后再做git update-index --skip-worktree abc.cfg一次,但是......

这是一个极端情况,在合并冲突的情况下可能会阻止git skip-worktree按预期工作。

当使用稀疏检出功能时,当被排除在检出之外的路径需要内容级别合并时,“ git cherry-pick”和其他合并操作会丢失skip_worktree,这与 HEAD 版本相同,但不会在工作中实现合并结果树,这使路径显示为已删除。

这已在 Git 2.19(2018 年第三季度)中通过保留该skip_worktree位(而不是在工作树中具体化文件)得到纠正。

请参阅Elijah Newren ( ) 的提交 2b75fb6(2018 年 7 月 27 日。 请参阅Ben Peart ( ) 的提交 92203e6(2018 年 7 月 27 日(由Junio C Hamano 合并 -- --提交 e4095da中,2018 年 8 月 15 日)newren
benpeart
gitster

合并递归:必要时保留 skip_worktree 位

合并递归获取任何被 unpack_trees 标记为未合并的文件,尝试确定它们是否可以被解析(例如使用重命名或文件级合并),然后如果可以,它将删除旧的缓存条目并写入新的.

这意味着ce_flags这些缓存条目的任何内容在合并时都会被清除。

不幸的是,如果一个文件被标记为skip_worktree并且它需要文件级合并,但合并结果与在 中找到的文件版本相同HEAD,我们会跳过更新工作树(因为文件未更改)但清除该skip_worktree位(因为的delete-cache-entry-and-write-new-one)。

这使得 git 将文件视为在工作副本中具有本地更改,即删除,尽管它不存在但应该显示为未更改。在这种情况下通过复制标志来
避免这个问题。skip_worktree

于 2018-08-19T16:55:12.070 回答
0

我认为您的项目是一个移动应用程序项目,因为您在 scripts/app.js 中有错误

您正在应用存储,仍然忽略它并且不想推送您的本地更改,这很好。不应该有任何问题因此。

现在,您得到的错误fatal: Unable to mark file scripts/app.js,我猜是由于您从远程提取的更改。这样做,在不同位置获取一个新的远程副本并使用任何比较工具来查看两个项目中所有文件的不同之处,特别是 app.js 文件。

于 2015-08-27T06:21:38.573 回答