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

fre*_*oid 7 git github git-reset

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

我如何保持有用的变化?

Pau*_*xon 5

您可以使用git stash临时存储更改,然后将其撤回 - 请参阅有关存储的Pro Git章节.

  • @freemanoid,好吧,让我们假装你想象中的`git preserve-these-and-these-changes`命令确实存在; 那么每次你想保留一些东西以便生存`git reset --hard`你需要调用那个虚构的命令,然后调用另一个命令来"撤消"它在所选文件上设置的保存状态.现在这与`git stash` /`git stash pop`有何不同? (5认同)

Von*_*onC 5

您也可以尝试:

git update-index --skip-worktree -- file
# to cancel it:
git update-index --no-skip-worktree -- file
Run Code Online (Sandbox Code Playgroud)

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

  • 看起来skip-worktree您正在非常努力地保存本地数据。但这并不会阻止您在安全的情况下进行上游更改。再加上git不会重置pull上的标志。但是,对于开发人员而言,忽略“ reset --hard”命令可能会令人讨厌。
  • assume-unchanged标记可能会在pull操作中丢失,并且此类文件中的本地更改对git似乎并不重要。
    假定不变,则假定开发人员不应更改文件。如果文件已更改–则更改并不重要。该标志旨在提高未更改的文件夹(如SDK)的性能。但是,如果没有兑现承诺,并且实际上已更改了文件,则git会将标志还原以反映实际情况。在通常不希望更改的文件夹中有一些不一致的标志可能是可以的。

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