能否使用干运行进行git stash pop操作?

7

git stash pop会盲目地覆盖本地更改还是将其与本地更改合并?

如果它进行合并,可能会出现合并冲突。是否有任何方法可以事先知道是否会出现合并冲突,例如使用--dry-run或其他方法?

我能够在git fetch和git push中找到--dry-run,但在git stash pop中找不到。

编辑后的问题说明 -

我遇到了这样一种情况:我有一个大约两天前的git stash。在执行git stash之后,本地分支已被修改。这意味着本地文件与存储的文件存在差异(所有文件都已跟踪,并且存储库或本地分支中没有未跟踪的文件)。

问题是,我猜想,一旦我执行git stash apply,如果进行复杂的合并操作,则本地更改将处于冲突状态,因此无法撤消合并操作(因为无法撤消合并操作)。 git checkout无法帮助,因为本地分支中有本地更改。我的理解正确吗?

我想在执行git stash apply之前进行干运行以查看结果。因此,在我做任何事情并在以后哭泣之前,我想找到解决此问题的优雅方法。


你可以通过尝试来回答你的第一个问题。当然,它会尝试合并。另一个问题很有趣。 - underscore_d
你的编辑没有改变任何东西。正如我的答案所解释的,如果你有本地更改,Git 将不会让你应用存储时会触及到本地更改的内容。- 如果你担心丢失本地未提交的更改,那么请先提交它们。 - poke
2个回答

10

能否在git stash pop时使用干运行(dry run)?

我不确定是否支持干运行,但是你可以使用apply命令代替pop命令(这样可以保留一份备份,以防更改不能成功应用,需要稍后再次应用):

git stash apply

如果你不喜欢修改的结果,可以使用checkout将更改恢复到以前的状态,或解决冲突后使用ours选项。否则,如果更改无问题,请使用theirs选项。

git stash apply不会覆盖未跟踪的文件(它将无法应用,直到您提交未提交的文件)。换句话说,git stash pop/apply是一个安全的过程,不会导致数据丢失。

根据问题中的更改进行更新:

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

不,这不会发生,但如果您已经提交了更改,即本地更改将不会被覆盖或以任何方式丢失。Git会提示您在应用存储之前必须提交更改。在以下情况下,我尝试应用存储时,其中一个更改未提交(并且它们将受到存储数据的影响):

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

当您提交它们时,您将能够应用存储,此时可能会出现冲突。


因为合并操作没有撤销

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

再次确认,git stash apply是一个安全的过程。它将拒绝覆盖任何未提交的更改(即您不会丢失任何数据),如果合并结果不好,只需撤销合并提交。

如果仍有任何不清楚的地方,我将尽力帮助您。


我编辑了我的问题,关于我对Git stash apply的担忧。请告诉我你的看法。 - infoclogged

2

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

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

因此,您可以安全地尝试应用存储,并查看它是否成功。
话虽如此,当没有本地未提交的更改时,应用存储将尝试将更改与当前版本合并。在此过程中,可能会出现合并冲突,您需要手动解决。
通常,这不是问题,但使用git stash pop存在一个问题:git stash pop将应用存储,可能导致合并冲突,然后删除存储。如果您随后无法解决合并冲突,则可能希望能够回顾原始存储。
因此,我建议您始终使用git stash apply,它只会应用存储但保留它。然后,当存储成功应用并且您已经成功解决了任何可能的合并冲突时,您可以使用git stash drop删除存储。因此,这是git stash pop的安全替代方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接