无法使用rebase拉取代码

9
我收到了这个消息:
Cannot pull with rebase: You have unstaged changes.
Please commit or stash them.

是的,我有未提交的更改。我正在寻找一种方法,在从拉取中获取的新代码的顶部重新基于我的未提交更改。
我发现了这个:https://github.com/aanand/git-up 我想知道这是否仍然是正确的方法,或者是否有更现代的方法可供选择。
我使用的是git版本1.8.1。
4个回答

9

git-up可能是解决此问题的更为复杂的方式。
否则,您需要进行贮藏、变基和弹出贮藏。

"更现代的方法"将在git 1.8.5(或1.9,2013年第四季度)中提供。
正如我在"Git-如何使用当前索引(当前状态)的一些未暂存更改编辑旧(而不是先前)提交?"中所述:

"git rebase"学习了"--[no-]autostash"选项以保存本地更改,而不是拒绝运行(对此人们的正常反应是将它们贮藏起来并重新运行)。


自Git 2.9(2016年6月)以来,您现在可以(由artofwarfare评论):

git pull --rebase --autostash

只需运行 git pull --rebase --autostash 即可。看起来正是我想要的。 - ArtOfWarfare
@ArtOfWarfare 实际上,现在(即此旧答案4年后),我更喜欢简单的git pull,因为它可以使用git config pull.rebase true; git config rebase.autoStash true。 https://dev59.com/J10a5IYBdhLWcg3wipNA#30209750 - VonC
我正在编写一个脚本,我希望公司中的多个人将使用它。我不希望它只在他们在git中配置好了的情况下才能工作(我也不想让脚本更改或验证他们的配置)。我希望它可以直接工作,而我第一条评论中的命令似乎可以做到这一点。 - ArtOfWarfare
@ArtOfWarfare 我同意,并已将该新命令包含在答案中以增加可见性。但是,你们公司的人必须拥有Git 2.9+(2016年6月)才行。 - VonC

5

如果您的更改还未提交,您实际上无法进行“变基(rebase)”操作,因为git尚不知道它们存在。在运行git pull --rebase之前,您应该先将本地更改存储,并在操作完成后再恢复。


我知道这是可能的,但一行代码解决会更好。 - guettli
你可以编写一个Bash脚本,将这三个步骤转换为一行代码。 - eoconnell
“你不能真正地“变基”你的未提交更改,因为Git还不知道它们的存在...” - Git可能不知道它们,但该死的工具拒绝运行几乎每个命令,甚至切换分支也是如此... - jww
这是一项安全预防措施。Git不希望您丢失更改。正如VonC所提到的,您可以为单次操作设置--autostash标志,或在git配置中设置rebase.autostash=true以全局应用它。 - eoconnell

4

仅供记录:由于使用变基会丢失历史信息,我们决定在公司中使用“合并”。 - guettli

3

我回答有点晚了,但也许对某些人有用。

如果您只是想要一个可以执行 stash / pull rebase / stash pop 的一行命令,您可以创建一个别名。

git config --global alias.spr '!f(){ git stash && git pull --rebase && git stash pop; };f'

这将创建一个名为spr的别名,它执行三个操作并允许您在有未暂存更改时快速执行pull --rebase

git spr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接