强制git stash覆盖添加的文件

Ste*_*fan 189 git

我有一些文件在git中未被跟踪.我做了一些更改并希望提交它们,但意识到我忘记了先检查未修改的文件.所以我隐藏了文件,然后添加了未修改的版本.

然后,当我将存储应用于存储库时,由于已经添加了文件,我会收到冲突.

如何应用存储,并强制使用存储库中的版本优先于存储库中的原始文件?

谢谢

tom*_*tom 315

使用git checkout而不是git stash apply:

$ git checkout stash -- .
$ git commit
Run Code Online (Sandbox Code Playgroud)

这会将当前目录中的所有文件还原为其存储版本.


如果工作目录中的其他文件有更改应该保留,那么这是一个不那么苛刻的替代方案:

$ git merge --squash --strategy-option=theirs stash
Run Code Online (Sandbox Code Playgroud)

如果索引中有更改,或者合并将触摸具有本地更改的文件,git将拒绝合并.可以使用存储库检出单个文件

$ git checkout stash -- <paths...>
Run Code Online (Sandbox Code Playgroud)

或与...互动

$ git checkout -p stash
Run Code Online (Sandbox Code Playgroud)

  • 我必须在包含我的更改的最高父文件夹中运行`git checkout stash - .`,否则它只将更改应用于我运行命令的文件夹. (3认同)
  • `git checkout stash-.`运行该命令时,它实际上什么也没做。 (2认同)
  • @RotsiserMho Git在提供确认消息方面不是很好。您确定它什么都不做吗?对我来说很好。 (2认同)

Net*_*uel 10

强制git stash pop运行此命令

git stash show -p | git apply && git stash drop
Run Code Online (Sandbox Code Playgroud)

  • 好答案。但这太令人沮丧了。为什么他们不能添加一个“--force”标志?啊。 (2认同)

Has*_*TBT 5

git stash show -p | git apply

然后git stash drop如果您想放置藏起来的物品。

  • @eis,您可以添加“--reject --whitespace=fix”作为“git apply”的选项。检查[此说明](/sf/answers/1076310861/)了解其工作原理。一起:`git stash show -p | git apply --reject --whitespace=fix` (3认同)
  • 注意:您应该在存储库的根目录中才能正常工作,否则您将获得 [this](/sf/answers/3184758321/)。 (2认同)

Use*_*645 5

长话短说:

git checkout HEAD path/to/file
git stash apply
Run Code Online (Sandbox Code Playgroud)

长版:

由于您想要覆盖未提交的更改,因此您会收到此错误。使用 撤消这些更改git checkout HEAD。您可以使用 撤消对特定文件的更改git checkout HEAD path/to/file。排除冲突原因后,即可照常申请。