错误:无法使用rebase进行提取:您已经执行了非暂存更改

我已经开始与一些项目的朋友合作,他们使用heroku git仓库。

我前几天克隆了版本库,之后他们做了一些修改,所以我试图获得最新的更新

我运行了git pull --rebase命令(这是正确的方法吗?): https : git pull --rebase

我得到以下错误:

 $ git pull --rebase Cannot pull with rebase: You have unstaged changes. Please commit or stash them. 

我的猜测是,我搞砸了代码,现在它要我提交或放弃(这是什么意思是什么意思?)的变化。 这是怎么回事? 如果是这种情况,我想放弃我可能做的任何更改,只是从git仓库获取更新的代码。

任何想法我可以做什么?

git status ,这会告诉你什么文件已经改变。 既然你说你不想保留更改,你可以做git checkout -- <file name>或者git reset --hard来摆脱这些变化。

大多数情况下,git会告诉你如何处理更改。 例如,你的错误消息说git stash你的变化。 这将是如果你想保持他们。 拉后,你会做git stash pop和你的变化将被重新应用。

git status还有如何摆脱取决于文件是否被提交进行提交的变化。

一般而言,用rebase来拉动是一个很好的做法。

但是,如果你的索引不干净,你就不能这样做,也就是说你做了没有被提交的更改。

你可以这样做,假设你想保持你的改变:

  1. 存储您的更改: git stash
  2. 从大师拉底
  3. 重新应用您在(1)中git stash apply stash@{0}的更改: git stash apply stash@{0}或更简单的git stash pop

首先从git status开始

看看您是否有任何未决的变化。 放弃他们,运行

 git reset --hard 

你可以随时做

 git fetch && git merge --ff-only origin/master 

(a)如果你有没有提交的改变与上游改变相冲突,或者(b)与存储/拉取/应用相同的效果,你将得到(a)没有改变:一个重新分配让你在HEAD的最新改变和你未提交的改变原样。

如果您希望在执行rebase时保留工作更改,则可以使用--autostash 。 从文档 :

在开始rebase之前,如果需要的话,将局部修改隐藏起来(参见git-stash [1] ),并在完成时应用隐藏。

例如:

 git pull --rebase --autostash 

当未分离的变化是因为git试图修复一个文件(总是我的情况)时,不pipe存储或检出或重置都不会使它消失。

但是,如果意图是rebase和忽略unstaged改变,那么我所做的就是删除本地分支,然后再次检查出来。

 git checkout -f anyotherbranchthanthisone git branch -D thebranchineedtorebase git checkout thebranchineedtorebase 

瞧! 它还没有让我失望。

这适用于我:

 git fetch git rebase --autostash FETCH_HEAD