我有一些在git中未被跟踪的文件。我对它们进行了更改,想要提交这些更改,但是意识到我忘记了先检入未修改的文件。所以我将这些文件藏起来(stash),然后添加了未修改的版本。
然后当我将这个stash应用到仓库时,由于文件已经被添加过了,我会遇到冲突。
我该如何应用这个stash并且强制使用stash里的版本而不是仓库中原来的版本呢?
谢谢
我有一些在git中未被跟踪的文件。我对它们进行了更改,想要提交这些更改,但是意识到我忘记了先检入未修改的文件。所以我将这些文件藏起来(stash),然后添加了未修改的版本。
然后当我将这个stash应用到仓库时,由于文件已经被添加过了,我会遇到冲突。
我该如何应用这个stash并且强制使用stash里的版本而不是仓库中原来的版本呢?
谢谢
使用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 checkout stash -- <paths...>
或者通过交互方式
$ git checkout -p stash
git checkout stash -- .
这个命令时,它实际上没有做任何事情。 - Rotsiser Mhogit checkout stash -- .
,否则它只会将更改应用于我运行命令的文件夹。 - Leogit stash show -p | git apply
然后如果您想要删除暂存的文件,使用 git stash drop
命令。
--reject --whitespace=fix
作为选项添加到git apply
中。查看这个解释了解它的工作原理。
全部命令:git stash show -p | git apply --reject --whitespace=fix
。 - Hassan TBT要强制执行git stash pop
,请运行此命令
git stash show -p | git apply && git stash drop
--force
标志呢?唉。 - Spongman简述:
git checkout HEAD path/to/file
git stash apply
简化版:
出现这个错误,是因为有未提交的更改需要被覆盖。使用git checkout HEAD
命令撤销这些更改。你可以使用git checkout HEAD path/to/file
来针对特定文件进行撤销操作。在解决冲突后,可以像往常一样提交更改。
git reset --hard FETCH_HEAD
警告:此操作将删除所有未提交的更改。
git checkout HEAD --force
git stash apply
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
。我认为Tom的回答中提到的这个选项是自动解决冲突的最简单、最少出错的方法:
$ git merge --squash --strategy-option=theirs stash
你可以像这样输入:git使用stash
作为commitish来引用存储的顶部。
它将使您拥有所有存储的文件添加到索引中并解决与存储匹配的问题,但不会创建任何提交。此外,如果您在工作副本中有本地更改,您不会丢失更改,它将中止。
它非常有用,我认为值得在~/.gitconfig中设置别名:
[alias]
stashforceapply = "!f() { stash=${1:-stash}; git merge --squash --strategy-option=theirs $stash ; }; f"
使用git stashforceapply
命令应用最新的存储,或者使用git stashforceapply stash@{1}
命令应用下一个存储,以此类推。
git branch temp && git reset --hard stash && git reset temp && git branch -D temp
git stash apply
命令前,使用git rm
命令移除新添加的文件。这样做可以让你暂存更改,直到有更好的解决方案出现。 - tom