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

use*_*950 123 git pull heroku

我已经开始与一些项目的朋友合作,他们使用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.
Run Code Online (Sandbox Code Playgroud)

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

知道我能做什么吗?

Sch*_*eis 156

这样git status,这将显示哪些文件已更改.既然你声明你不想保留你可以做的改变git checkout -- <file name>或者git reset --hard去除改变.

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

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


mko*_*bit 62

如果您想在执行rebase时保持工作更改,可以使用--autostash.从文档:

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

例如:

git pull --rebase --autostash
Run Code Online (Sandbox Code Playgroud)

  • 如果您希望自动转发是默认行为,您可以设置`git config --global rebase.autoStash true`然后您不需要传递开关. (11认同)
  • 这是现代的答案. (4认同)
  • 这就是我一直在寻找的东西!(请注意,命令行开关从 git 2.9 开始可用,但选项 `rebase.autostash` 从 2.6 开始可用)。 (2认同)
  • 为什么这不是默认值? (2认同)

Kos*_*sis 48

一般情况下,使用rebase拉动是一种很好的做法.

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

假设您要保留更改,可以执行此操作:

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

  • @nehemiahjacob你也可以`git stash pop`来应用最近隐藏的更改并避免记住更长的`apply stash @ {0}`. (5认同)

Iga*_* S. 27

首先从a开始 git status

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

git reset --hard
Run Code Online (Sandbox Code Playgroud)


agi*_*ult 18

如果你想自动隐藏你的更改并为每个 rebase 取消隐藏它们,你可以这样做:

git config --global rebase.autoStash true
Run Code Online (Sandbox Code Playgroud)

  • 这是使最新版本的 Git 与 Git 过去一直以来的工作方式相同的唯一答案。为什么要让人们添加“--autostash”,因为它可以是......自动的? (2认同)

Cpp*_*ase 12

这对我有用:

git fetch
git rebase --autostash FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)

  • 啊 autostash,这为我节省了额外的两个命令。这应该是 IMO 的正确答案。 (2认同)

Jar*_*ike 9

你总能这样做

git fetch && git merge --ff-only origin/master
Run Code Online (Sandbox Code Playgroud)

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


tgg*_*gne 6

当未暂存的更改是因为 git 试图修复文件上的 eol 约定时(就像我的情况一样),任何存储、检出或重置都不会使其消失。

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

git checkout -f anyotherbranchthanthisone
git branch -D thebranchineedtorebase
git checkout thebranchineedtorebase
Run Code Online (Sandbox Code Playgroud)

瞧!它还没有让我失望。