2013-06-02 25 views

回答

3

你还可以尝试:

git update-index --skip-worktree -- file 
# to cancel it: 
git update-index --no-skip-worktree -- file 

应该抵制git reset --hard。 (请参阅this answer'--'双连字符使用)
请参阅此blog post

  • 它看起来像skip-worktree是拼命的保护您的本地数据。但是,如果它是安全的,它并不妨碍你获得上游的变化。加上git不会重置拉标志。但是忽略“重置 - 硬”命令对于开发者来说可能会是一个令人讨厌的惊喜。
  • assume-unchanged在pull操作中标志可能会丢失,并且这些文件中的局部更改似乎对git并不重要。
    假设 - 不变假定开发人员不应更改文件。如果一个文件被改变 - 比这个改变并不重要。此标志旨在提高不变文件夹(如SDK)的性能。但如果诺言被破坏并且文件实际上发生了变化,那么git会回复标志以反映现实。可能在通常不需要更改的文件夹中有一些不一致的标志是可以的。

另一方面,当您指示git不触摸特定文件时,skip-worktree很有用。这对于已经跟踪的配置文件很有用。上游主存储库托管一些生产就绪配置,但您想要更改配置中的某些设置以便能够执行一些本地测试。并且您不希望意外检查此文件中的更改以影响生产配置。在这种情况下,skip-worktree成为完美的场景。

+0

谢谢,它的工作原理!我怎样才能删除这个标志? – freemanoid

+1

@freemanoid只是'git update-index --no-skip-worktree -aFile' – VonC

+0

嗯,我没有找到这个时候通过人看,但它在那里。所以'git update-index --no-skip-worktree my_file'''起作用。 – freemanoid

5

您可以使用git stash临时存储您的更改,然后稍后再将其更改 - 请参阅Pro Git chapter on stashing

+0

是我知道'''git stash'''但我不想每次都隐藏我的更改。 – freemanoid

+3

@freemanoid,好吧,让我们假装你想象中的'git preserve-these-and-these-changes'命令确实存在;那么每次你想保留一些东西来保存'git reset --hard'时,你需要调用这个虚构的命令,然后调用另一个命令来“撤消”它在所选文件上设置的保存状态。现在这将如何不同于'git stash' /'git stash pop'? – kostix

1

如果您不希望这些更改被提交,但始终需要它们在本地,则考虑为您的本地更改创建并提交脚本或修补程序文件。然后,您可以保留并记录您的更改,并在硬重置后轻松应用它们。

如果您有针对您的环境的更改,那么可能需要将它们外部化为配置文件。

相关问题