强制git隐藏覆盖添加的文件

我有一些文件在git中未被跟踪。我做了一些修改,想提交,但意识到我忘了先签入未修改的文件。所以我把文件藏起来,然后添加未修改的版本。

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

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

谢谢

210048 次浏览

使用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

请注意,这只适用于问题中描述的情况,即在创建存储后进行了提交(如果没有提交,git将快进,这不是我们想要的)。

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

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

或者与

$ git checkout -p stash

git stash show -p | git apply

然后git stash drop如果你想删除存储的项目。

强制git stash pop使用此命令

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

TL;博士:

git checkout HEAD path/to/file
git stash apply

长版:

您得到这个错误是因为您想要覆盖的未提交的更改。使用git checkout HEAD撤销这些更改。你可以用git checkout HEAD path/to/file撤销对特定文件的更改。在消除冲突的原因后,您可以像往常一样申请。

保持本地源备份,然后应用强制重置以与GIT回购保持一致。然后更改本地代码并提交。

git reset——hard FETCH_HEAD