【问题标题】:Cannot pull with rebase无法使用 rebase 拉取
【发布时间】:2013-09-22 00:44:39
【问题描述】:

我收到这条消息:

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

是的,我有未提交的更改。我搜索了一种方法,将我未提交的更改重新设置在我从拉取中获得的新代码之上。

我发现了这个:https://github.com/aanand/git-up

我想知道这是否仍然是要走的路,或者是否还有更现代的路要走。

我使用 git 版本 1.8.1

【问题讨论】:

    标签: git git-rebase


    【解决方案1】:

    git-up 可能是解决此问题的更复杂的方法。
    否则,您需要 stash、rebase 和 stash pop。

    “更现代的方式”将在 git 1.8.5(或 1.9,2013 年第四季度)中提供。
    正如我在“Git - How to edit old (not previous) commit with some of the unstaged changes from current index (current state)?”中提到的:

    git rebase”学会了“--[no-]autostash”选项来保存本地更改而不是拒绝运行(人们的正常反应是存储它们并重新运行)。


    Since Git 2.9 (June 2016),您现在拥有(由artofwarfare 评论):

    git pull --rebase --autostash
    

    【讨论】:

    • 只要git pull --rebase --autostash。似乎已经完成了我想要的。
    • @ArtOfWarfare 实际上这些天(即这个旧答案之后的 4 年),我更喜欢简单的 git pull,因为 git config pull.rebase true; git config rebase.autoStash true stackoverflow.com/a/30209750/6309
    • 我正在编写一个脚本,我希望我公司的多个人都会使用它。我不希望它只有在他们在git 中配置了所有内容时才能工作(而且我不想让脚本更改或验证他们的配置。)我希望它能够正常工作,并且我的第一个命令评论似乎是这样。
    • @ArtOfWarfare 我同意,并在答案中包含了更新的命令以提高可见性。但是您公司的员工必须拥有 Git 2.9+(2016 年 6 月)。
    【解决方案2】:

    我回答得有点晚,但也许这对某人有用。

    如果你只是在寻找一个单行代码来执行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
    

    【讨论】:

      【解决方案3】:

      可以使用 git-up 的 Python 端口:https://github.com/msiemens/PyGitUp

      pip install git-up
      

      【讨论】:

      • 仅作记录:由于使用 rebase 会丢失历史信息,因此我们决定在我们公司使用“合并”。
      【解决方案4】:

      你不能真正“重新定位”你未提交的更改,因为 git 还不知道它们。您应该在运行 git pull --rebase 之前存储本地更改,然后再应用它们。

      【讨论】:

      • 我知道这是可能的,但单线会很好。
      • 您总是可以编写一个 bash 脚本,将这三个步骤变成一条线。
      • “你不能真正“rebase”你未提交的更改,因为 git 还不知道它们......” - git 可能不知道它们,但该死的工具拒绝运行几乎所有命令,甚至拒绝切换分支......
      • 它是作为安全预防措施存在的。 Git 不希望您丢失所做的更改。正如 VonC 所提到的,您可以为一次性设置 --autostash 标志或在您的 git 配置中设置 rebase.autostash=true 以全局应用它。
      猜你喜欢
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 2020-05-18
      • 2014-12-17
      • 1970-01-01
      • 2021-09-12
      • 2016-01-30
      • 2014-10-08
      相关资源
      最近更新 更多