强制git stash覆盖添加的文件

sy5wg1nm  于 2023-02-17  发布在  Git
关注(0)|答案(6)|浏览(252)

我有一些文件在git中没有被跟踪。我做了一些修改,想提交它们,但意识到我忘记了先签入未修改的文件。所以我把文件藏起来,然后添加未修改的版本。
然后,当我将隐藏文件应用到存储库时,由于已经添加了文件,我会遇到冲突。
我如何应用隐藏,并强制使用隐藏中的版本优先于存储库中的原始版本?
谢谢

tktrz96b

tktrz96b1#

使用git checkout代替git stash apply

警告:下面的命令会将当前目录(.)中的所有文件还原到它们的隐藏版本。如果您有未提交或未暂存的更改,它们将永久丢失

  • 如果您在创建隐藏文件后编辑了文件,则这些更改将丢失。
  • 如果您仅隐藏特定文件(使用git stash push <pathspec>...git stash -p),请勿使用此命令,因为 * 所有其他文件中的更改将丢失 *。

在运行此命令之前,使用git status检查是否没有未提交或未暂存的更改。

# WARNING: uncommitted/unstaged changes will be permanently lost
$ git checkout stash -- .
$ git commit

如果对工作目录中的其他文件进行了更改,而这些更改需要保留,那么下面是一个不那么麻烦的替代方法:

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

请注意,这只适用于问题中描述的情况,即你在创建stash后提交了一次(如果没有提交,git会快进,这不是我们想要的)。
如果索引中有变化,或者合并操作会触及本地有变化的文件,git将拒绝合并。

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

或交互地

$ git checkout -p stash
nimxete2

nimxete22#

git stash show -p | git apply
然后git stash drop(如果您想删除隐藏的项目)。

pdtvr36n

pdtvr36n3#

要强制git stash pop,请运行以下命令

git stash show -p | git apply && git stash drop
gupuwyp2

gupuwyp24#

TL;DR:

git checkout HEAD path/to/file
git stash apply

详细版本:

出现此错误是因为要覆盖未提交的更改。请使用git checkout HEAD撤消这些更改。您可以使用git checkout HEAD path/to/file撤消对特定文件的更改。删除冲突原因后,可以照常应用。

pn9klfpd

pn9klfpd5#

保留本地源代码备份,然后应用强制重置以与GIT repo保持一致。然后更改本地代码并提交。
git重置--硬FETCH_HEAD

wfypjpf4

wfypjpf46#

在我的示例中,git checkout stash --将抛出此错误

error: Your local changes to the following files would be overwritten by checkout:
... files ...
Please commit your changes or stash them before you switch branches.
Aborting

解决办法是做git checkout stash -- /path/to/each/individual/file

相关问题