在git中,如果您有任何未提交的修改,则无法执行git pull
,并出现以下错误:
错误:无法恢复原状:您已取消暂存更改。
错误:请提交或隐藏它们。
它可用于未跟踪的文件。我感到非常烦恼,即使每次更改都与要拉出的文件无关,我每次都要拉git stash
。
如果我的更改与被撤消的更改没有冲突,是否有任何变通办法允许撤消?我真的不明白为什么如果拉力不会破坏任何东西,为什么它不起作用。如果这是安全问题,那么为什么它适用于新文件?从理论上讲,pull可以引入相同路径的新文件。
有什么解决方案可以使它变得更容易?
答案 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
置于其上时知道自己在做什么。