为什么我不能在不相关的本地更改上进行调整?

时间:2018-09-26 15:54:05

标签: git git-pull

在git中,如果您有任何未提交的修改,则无法执行git pull,并出现以下错误:

  

错误:无法恢复原状:您已取消暂存更改。

     

错误:请提交或隐藏它们。

它可用于未跟踪的文件。我感到非常烦恼,即使每次更改都与要拉出的文件无关,我每次都要拉git stash

如果我的更改与被撤消的更改没有冲突,是否有任何变通办法允许撤消?我真的不明白为什么如果拉力不会破坏任何东西,为什么它不起作用。如果这是安全问题,那么为什么它适用于新文件?从理论上讲,pull可以引入相同路径的新文件。

有什么解决方案可以使它变得更容易?

2 个答案:

答案 0 :(得分:3)

您可以使用git pull --rebase --autostash。这实际上是存储您的本地更改,从远程获取,在其基础上重新存储并在一个命令中弹出存储。

请注意,您还可以将这些标志配置为默认行为:

$ git config pull.rebase true
$ git config rebase.autoStash true

但是强大的力量伴随着巨大的责任,只有在绝对确定自己在做什么的情况下才使用此选项。

答案 1 :(得分:2)

应注意,此行为取决于您的配置。使用默认的pull行为-“获取并合并”时,您可以进行本地更改,并且pull仍将起作用,只要要合并的更改不会影响与本地变化。

但是在进行rebase git时要更加谨慎。您可以争论这是否必要,或者是否更受rebase所涉及的技术细节的启发,也许您认为用户不必关心。但是无论如何,这就是git的行为。

如果您确实希望这是自动的,则可以使用自动存储。最简单的方法就是说

git pull --autostash

如果您希望它更加自动化,可以将rebase.autostash的配置值设置为true。但是,这会使 all 重新存储的默认值在配置值的范围内自动存储(即,在存储库中,或者在您的计算机上,如果您使用--global选项进行配置)。这意味着当您使用肮脏的工作树进行基准测试时,您将尝试进行基准测试(以及可能难以解决的冲突)。 autostash被认为是“谨慎使用”选项,因此不建议将其配置为默认选项。

为此,即使您仅在--autostash上使用pull参数,也应小心。只是您在进行基于基准的拉取事实被记录为“潜在危险”,因此您需要确保在将autostash置于其上时知道自己在做什么。