306

I have some files which were untracked in git. I made some changes and wanted to commit them, but realised I had forgotten to check in the unmodified files first. So I stashed the files, then added the unmodified versions.

Then when I apply the stash to the repository, I get conflicts due to the files having already been added.

How can I apply the stash, and force the versions in the stash to be used in preference to the originals in the repository?

Thanks

4

5 回答 5

501

使用git checkout代替git stash apply

$ git checkout stash -- .
$ git commit

这会将当前目录中的所有文件恢复到它们的隐藏版本。


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

$ git merge --squash --strategy-option=theirs stash

如果索引有变化,或者合并会触及到有本地变化的文件,git会拒绝合并。可以使用从存储中签出单个文件

$ git checkout stash -- <paths...>

或与

$ git checkout -p stash
于 2013-05-18T14:03:22.527 回答
29

git stash show -p | git apply

然后git stash drop如果你想删除隐藏的项目。

于 2018-08-09T07:16:32.283 回答
16

强制git stash pop运行此命令

git stash show -p | git apply && git stash drop
于 2019-05-17T13:37:24.557 回答
2

TL;博士:

git checkout HEAD path/to/file
git stash apply

长版:

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

于 2020-05-21T10:37:11.313 回答
1

保留本地源备份,然后应用强制重置以与 GIT 存储库对齐。然后更改您的本地代码并提交。

git reset --hard FETCH_HEAD

于 2021-07-12T16:21:59.540 回答