错误:无法使用rebase:您有未分阶段的更改

时间:2014-05-07 12:12:05

标签: git heroku pull

我已经开始与一些朋友合作开展一个项目&他们使用heroku git存储库。

我几天前克隆了存储库,他们已经做了一些更改,所以我试图获取最新的更新

我按照此处所述运行git pull --rebase命令(这是正确的方法吗?):https://devcenter.heroku.com/articles/sharing#merging-code-changes

我收到以下错误:

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

我的猜测是我搞乱了代码,现在它要么我要么提交要么丢弃(隐藏的意思是什么?)这些变化。这是发生了什么?如果是这种情况,我想放弃我可能做出的任何更改,只是从git存储库中获取更新的代码。

知道我能做什么吗?

9 个答案:

答案 0 :(得分:139)

执行git status,这会显示哪些文件已更改。由于您声明您不想保留更改,因此您可以git checkout -- <file name>git reset --hard删除更改。

在大多数情况下,git会告诉您如何处理更改。例如,您的错误消息表示git stash您的更改。如果你想保留它们就是这样。拉动之后,您将执行git stash pop并重新应用您的更改。

git status还有如何摆脱变化,具体取决于文件是否为提交暂存。

答案 1 :(得分:46)

一般来说,使用rebase是一种很好的做法。

但是,如果您的索引不干净,即您已进行了尚未提交的更改,则无法执行此操作。

您可以这样做,假设您想要保留更改:

  1. 使用以下内容隐藏您的更改:git stash
  2. 使用rebase从主人那里拉
  3. 使用:git stash apply stash@{0}或更简单的git stash pop
  4. 重新应用您在(1)中隐藏的更改

答案 2 :(得分:42)

如果您想在执行rebase时保持工作更改,可以使用--autostash。来自documentation

  

在开始rebase之前,如果需要,请隐藏本地修改(请参阅git-stash[1]),并在完成后应用存储。

例如:

git pull --rebase --autostash

答案 3 :(得分:26)

首先从a开始 git status

查看您是否有任何待处理的更改。 要丢弃它们,请运行

git reset --hard

答案 4 :(得分:12)

这对我有用:

git fetch
git rebase --autostash FETCH_HEAD

答案 5 :(得分:9)

你可以随时

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

如果您有未提交的更改与上游更改冲突或(b)与stash / pull / apply相同的效果,您将获得(a)无变化:一个rebase,让您从HEAD和您的最新更改未提交的更改原样保留。

答案 6 :(得分:5)

如果您想自动存储您的更改并在每次重新设置时取消存储它们,则可以执行以下操作:

git config --global rebase.autoStash true

答案 7 :(得分:4)

当未分阶段的更改是因为git试图修复文件上的eol约定时(总是我的情况),没有任何存储或检出或重置会使其消失。

但是,如果意图真的要重新绑定并忽略未更改的更改,那么我所做的就是在本地删除分支然后再次检查它。

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

瞧!它还没有让我失望。

答案 8 :(得分:0)

按照以下步骤

从功能/分支(输入以下命令)

git checkout master

git pull

git checkout功能/分支名称

git merge master