我已经开始与一些朋友合作开展一个项目&他们使用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存储库中获取更新的代码。
知道我能做什么吗?
答案 0 :(得分:139)
执行git status
,这会显示哪些文件已更改。由于您声明您不想保留更改,因此您可以git checkout -- <file name>
或git reset --hard
删除更改。
在大多数情况下,git会告诉您如何处理更改。例如,您的错误消息表示git stash
您的更改。如果你想保留它们就是这样。拉动之后,您将执行git stash pop
并重新应用您的更改。
git status
还有如何摆脱变化,具体取决于文件是否为提交暂存。
答案 1 :(得分:46)
一般来说,使用rebase是一种很好的做法。
但是,如果您的索引不干净,即您已进行了尚未提交的更改,则无法执行此操作。
您可以这样做,假设您想要保留更改:
git stash
git stash apply stash@{0}
或更简单的git stash pop
答案 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