7

我有一些我不想提交的本地更改(不在单独的文件中,所以 .gitignore 不起作用)。
git reset --hard有时会在承诺清除偶尔的更改后这样做,但显然我也失去了我想离开的有用更改。

如何保留有用的更改?

4

3 回答 3

6

您可以使用git stash临时存储您的更改,然后稍后将其拉回 - 请参阅Pro Git 章节中关于 stash的内容。

于 2013-06-02T10:25:18.197 回答
5

你也可以试试:

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

它应该抵抗git reset --hard. (请参阅有关 ' ' 双连字符使用的答案) 请参阅此博客文章--

  • 看起来skip-worktree正在努力保存您的本地数据。但是,如果它是安全的,它不会阻止您获取上游更改。另外 git 不会在 pull 时重置标志。但是忽略“reset --hard”命令可能会令开发人员大吃一惊。
  • assume-unchanged拉取操作中可能会丢失标志,并且此类文件中的本地更改对 git 似乎并不重要。
    Assume-unchanged 假定开发人员不应该更改文件。如果一个文件被改变了——那么这个改变并不重要。此标志旨在提高 SDK 等不更改文件夹的性能。但是如果承诺被破坏并且文件实际上被更改,git 会恢复标志以反映现实。可能在通常不打算更改的文件夹中有一些不一致的标志是可以的。

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

于 2013-06-02T15:34:10.867 回答
0

如果您从不希望提交这些更改,但总是需要在本地进行更改,请考虑为您的本地更改创建和提交脚本或补丁文件。然后,您可以保留和记录您的更改,并在硬重置后轻松应用它们。

如果您有特定于您的环境的更改,那么可能值得将它们外部化到配置文件中。

于 2013-06-02T13:05:08.020 回答