代码之家  ›  专栏  ›  技术社区  ›  mikewilliamson

Git:推动修正承诺

git
  •  9
  • mikewilliamson  · 技术社区  · 14 年前

    我目前正在做一个项目,并在两个不同的地方使用机器来完成它。我已经为正在使用的功能创建了一个分支,当我完成一些分支的工作时,我修改了对该分支的承诺,并将其推到服务器上,这样我就可以在另一台机器上停止使用的地方进行恢复。

    当我试图发送修改后的承诺时,它拒绝了我的推动。我认为这是因为我正在推送一个提交,它旨在击溃功能分支的当前头部。我通常只是使用——武力。

    有更好的方法吗?

    mike@sleepycat:~/projects/myproject$ git pull origin topx
    From heroku.com:myproject
     * branch            topx       -> FETCH_HEAD
    Already up-to-date.
    mike@sleepycat:~/projects/myproject$ git add app/models/reward.rb
    mike@sleepycat:~/projects/myproject$ git commit --amend
    [topx 82a9880] Added topX reward
     9 files changed, 106 insertions(+), 21 deletions(-)
     rewrite app/views/ceo/_reward_criteria.html.erb (96%)
     create mode 100644 public/javascripts/jquery.multiselect.min.js
     create mode 100644 public/site/javascripts/jquery.multiselect.min.js
     create mode 100644 public/stylesheets/jquery.multiselect.css
    mike@sleepycat:~/projects/myproject$ git push origin topx
    To git@heroku.com:myproject.git
     ! [rejected]        topx -> topx (non-fast-forward)
    error: failed to push some refs to 'git@heroku.com:myproject.git'
    To prevent you from losing history, non-fast-forward updates were rejected
    Merge the remote changes before pushing again.  See the 'Note about
    fast-forwards' section of 'git push --help' for details.
    
    1 回复  |  直到 14 年前
        1
  •  19
  •   max    14 年前

    在这种情况下,没有--force就无法覆盖远程分支。您有两种选择:

    • 继续使用 git push --force
    • 不要使用 --amend . 如果您所做的一些工作需要单独提交(足够稳定、编译、通过更多测试等),请创建新的提交。如果没有,则创建临时分支(类似于 my-feature-unstable 如果你的分支机构是 my-feature )在那里承诺。当它再次稳定时,你可以 git reset --soft my-feature , checkout my-feature commit 从几个未完成的提交创建分支中的单个提交。之后,可以删除临时分支。