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

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

我运行git拉——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.

我的猜测是我把代码弄乱了,现在它想让我要么提交要么放弃(这就是stash的意思吗?)这些更改。这就是正在发生的事情吗?如果是这种情况,我想放弃我可能做的任何更改,只是从git存储库中获得更新的代码。

知道我能做什么吗?


首先从 git状态

看看是否有任何挂起的更改。 要丢弃它们,运行

请注意,运行此命令将丢失所做的更改

git reset --hard

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

然而,如果你的索引不是干净的,也就是说,你所做的更改还没有提交,你就不能这样做。

你可以这样做,假设你想保留你的更改:

用git Stash保存您的更改 拉从主与rebase 重新应用你在(1)中存储的更改:git stash apply stash@{0}或更简单的git stash pop


做git状态,这将显示哪些文件已经更改。既然你说你不想保留这些更改,你可以做git checkout - <文件名>或git reset -很难摆脱这些更改。

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

Git status还提供了如何消除更改的方法,这取决于文件是否处于提交阶段。


你可以一直这样做

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

如果你的未提交更改与上游更改冲突,你将得到(a)没有更改,或者(b)与stash/pull/apply相同的效果:rebase将你放在HEAD的最新更改上,而你未提交的更改保留原样。


如果您想在执行重基时保持工作更改,您可以使用—autostash。从文档中可以看到:

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

例如:

git pull --rebase --autostash

当非分期变化是因为git试图修复文件上的eol约定时(就像我的情况一样),再多的存储、签出或重置都不会让它消失。

但是,如果真正的目的是重新设置基数并忽略未分期的更改,那么我所做的就是在本地删除分支,然后再次签出它。

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

瞧!它还没有让我失望。


这对我来说很管用:

git fetch
git rebase --autostash FETCH_HEAD

如果你想在每次重基时自动保存你的更改并取消保存它们,你可以这样做:

git config --global rebase.autoStash true

遵循以下步骤

从特性/分支(输入下面的命令)

Git checkout master

git pull

Git签出特性/分支名

Git 合并大师


您只需要使用下面的命令恢复未分段的更改

对于我的情况,我在纱线文件中有错误,对于你的情况,它可以是另一个文件

Git恢复- staging yarn.lock