我如何能够存储一些幸存git reset的局部变化--hard

时间:2013-06-02 10:22:47

标签: git github git-reset

我有一些本地更改(不在单独的文件中,因此.gitignore不起作用)我不想提交。
我有时会在承诺清除偶尔的变化之后做git reset --hard但是我也会失去我想要离开的有用变化。

我如何保持有用的变化?

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

您也可以尝试:

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不会重置旗帜。但忽略'reset --hard'命令可能会成为开发人员的一个令人讨厌的惊喜。
  •   在拉动操作中可能会丢失
  • assume-unchanged标志,并且这些文件中的本地更改似乎对git不重要。
      假设未更改假定开发人员不应更改文件。如果文件被更改 - 那个更改并不重要。此标志用于提高SDK等不可更改文件夹的性能。但是如果承诺被破坏并且文件实际被更改,git会恢复标志以反映现实。可能在一般意思不是要更改的文件夹中有一些不一致的标志是可以的。
  •   
     

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

答案 2 :(得分:1)

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

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