错误:无法使用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来拉动是一个很好的做法。
但是,如果你的索引不干净,你就不能这样做,也就是说你做了没有被提交的更改。
你可以这样做,假设你想保持你的改变:
- 存储您的更改:
git stash
- 从大师拉底
- 重新应用您在(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