是不是可以用干跑git stash pop?

问题描述 投票:3回答:2

git stash pop是否会盲目地覆盖本地更改或将它们与本地更改合并?

如果它合并,则可能存在合并冲突。有没有办法提前知道,使用--dry-run或其他方法会有合并冲突?

我可以找到--dry-run使用git fetch和git push但不能使用git stash pop。

编辑在几个答案后专门解释问题 -

我有一种情况,我有一个大约几天的git藏匿处。 git stash完成之后,本地分支已被修改。这意味着,本地文件和存储文件之间存在差异(跟踪所有文件,并且在存储或本地分支中没有未跟踪的文件)。

问题是,我想,一旦我执行git stash apply,在复杂的合并操作的情况下本地更改将处于冲突状态,因此无法撤消(因为没有撤消合并操作)。 git checkout不会有帮助,因为本地分支有本地更改。我的理解是否正确?

我想在做一个git stash apply之前做一个干运行之前看结果。所以,在我做任何事情并在之后哭泣之前,我想找到一个优雅的解决方案来解决这个问题。

git
2个回答
6
投票

是不是可以用干跑git stash pop?

我不确定干运行,但你可以apply藏匿而不是poping它(保留一个藏匿的副本,以防更改不适合,你想再次应用它们):

git stash apply

然后看结果,如果你不喜欢它们,只需将checkout改为之前的状态,或者解决冲突到ours。否则,他们改变是好的,解决他们到theirs

git stash apply不会覆盖未跟踪的文件(在提交未提交的文件之前,它将会被应用。)换句话说,git stash pop/apply是一个安全的过程,不会导致任何数据丢失。

Update according to the changes in the question:

我想,一旦我执行git stash apply,本地更改将处于冲突状态。

不,这不会发生,但如果你提交了更改。即,无论如何,本地更改不会被覆盖或丢失。 Git会抱怨你的更改必须在你申请藏匿之前提交。看到这个,这里我尝试应用stash,其中我的一个更改没有被提交(并且它们将受到存储数据的影响):

错误:合并将覆盖对以下文件的本地更改: file.txt的 请在合并之前提交更改或存储更改。 中止

当你提交它们时,是的你将能够应用存储,在这里你可能会遇到冲突。


因为没有撤消合并操作

当然有,只需还原合并提交:git revert --no-commit <MergeCommitHash>

再次,我确认git stash apply是一个安全的过程。它将拒绝覆盖任何未经修改的更改(即,您可以安全地丢失任何数据),并且如果您合并,并且结果不正常,只需还原合并提交。

如果有任何事情仍然不清楚,我会尽力帮助你。


1
投票

Git通常会尽可能地保护您的本地更改。这适用于检查更改以及应用stashes。如果您尝试应用可能影响具有本地未更改的更改的文件中的更改的存储,您将收到以下错误消息:

error: Your local changes to the following files would be overwritten by merge:
        conflicting-file.ext
Please commit your changes or stash them before you merge.
Aborting

因此,您可以安全地尝试应用存储,看看它是否会成功。

话虽这么说,当没有本地未经修改的更改时,应用stashes将尝试将更改与当前版本合并。执行此操作时,可能会发生合并冲突,然后您必须手动解决。

通常,这不是问题,但使用git stash pop时存在一个问题:git stash pop将应用存储,可能导致合并冲突,然后删除存储。如果您在解决合并冲突时遇到问题,那么您可能希望能够回顾原本不能执行的存储。

所以我总是建议你使用git stash apply代替,这只会应用存储但保持它。然后,当成功应用存储并且您已成功解决任何可能的合并冲突时,您可以使用git stash drop删除存储。所以这是git stash pop的安全替代品。

© www.soinside.com 2019 - 2024. All rights reserved.