[英]How to ignore a tracked file locally only
如何仅忽略本地已存在于索引中的文件? 我不想从索引中删除文件,从而影响其他人。 我尝试过的事情:
修改文件并尝试切换分支时,两个update-index命令均会给出错误。
$ git checkout myBranch
error: Your local changes to the following files would be overwritten by checkout:
myFile.json
Please commit your changes or stash them before you can switch branches.
Aborting
此错误是因为根据git文档, “内容安全仍然是优先事项”。 有任何想法吗?
问题变成: 当您签出其他提交时,您想对myFile.json
做什么?
使用--skip-worktree
(此处不使用--assume-unchanged
,这是一种速度破解,而不是绝对指令;请参阅Git-“ assume-unchanged”和“ skip-worktree”之间的区别 )告诉Git它不必太在乎对工作树文件的修改。 但是...它们是对工作树文件的修改。 假设此文件的路径为P。 Git保留与HEAD
提交匹配的索引版本-假设这是或将在我们正在查看时,提交ID1234567。工作树版本会更改,并且当您执行各种Git操作时,“跳过工作树版本”,只是继续使用P的索引版本。 这使您可以使用P的(未更改的)索引版本来修改工作树P ,甚至根据需要进行新的提交。
无论如何,您的P的工作树版本不再与您的P的索引版本匹配。 正如我们指出的那样,您现在处于提交1234567上,即git rev-parse HEAD
生成该哈希ID。
但是,现在,我们发现要让Git签出其他提交,即将HEAD
从提交1234567移到commitcba9或其他东西,Git将不得不替换或删除 P的索引版本。 它可以做到这一点,但是按照当前的编码,它也将替换或删除P的工作树版本。
(切换到一些其他的其他承诺,如说8888888-一个非常幸运的承诺在中国,可能不需要触碰P的索引版本。在这种情况下, git checkout
会很乐意切换HEAD
到该犯,再后来,再次回到1234567。但是fedcba9不太幸运。)
这是“安全的”替换或删除工作树版本P的当且仅当 P的指数版本匹配HEAD
P的版本,从此你可以从旧获取该版本P的背HEAD
,即从1234567在我们的例子中。 但是我们已经声明P的工作树版本与HEAD
版本不匹配。 --skip-worktree
标志不会更改此操作的(取消)安全性; 这只是意味着其他各种操作不会抱怨工作树版本与索引版本不匹配。
现在,您确定要从commit 1234567
移到fedcba9
。
提交1234567
拥有P的版本,而您的P的索引版本与此匹配。 您的P的工作树版本没有。
提交fedcba9
拥有P的不同版本,或者说P不再存在,并且P的索引版本与此不匹配。
检出fedcba9
将把fedcba9
的P版本放入索引,或从索引中删除P。 这两种操作都应替换或删除P的工作树版本,以便您可以看到fedcba9
中的内容(或不显示)。 绝对不同于1234567
。
你想看到版本的文件? 如果是这样,请将P的当前工作树内容保存到其他位置,将P还原到索引/ HEAD提交中的内容,然后签出fedcba9
。 现在,您将在工作树中fedcba9
。 您在其他地方保存的P将是安全的。
您是否在乎该文件的该版本中的内容,并且想要保留其中的内容? 如果是这样,请将P的当前工作树内容保存到其他位置,将P还原到索引/ HEAD提交中的内容,然后签出fedcba9
。 然后用您保存的其他位置的副本覆盖工作树中的所有内容。
Git不会为您选择任何一种,但是您自己做起来很容易。 您只需要确定哪个,然后执行即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.