Git:推动修改后的提交

mik*_*son 9 git

我目前正在开发一个项目,并在两个不同的位置使用机器来完成它.我已经为我正在处理的功能创建了一个分支,当我完成一些工作时,我将我的提交修改为该分支并将其推送到服务器,以便我可以从我在其他机器上停下的地方拿起.

当我尝试发送修改后的提交时,它会拒绝我的推送.我认为这是因为我推动了一个旨在破坏功能分支的当前HEAD的提交.我通常只使用--force.

有一个更好的方法吗?

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.
Run Code Online (Sandbox Code Playgroud)

max*_*max 19

在这种情况下,没有--force就无法覆盖远程分支.你有2个选择:

  • 继续使用 git push --force
  • 不要用--amend.如果你已完成的某些工作需要单独的提交(足够稳定,编译,传递更多测试等等),请创建新的提交.如果没有,创建临时分支(my-feature-unstable如果您的分支是这样的my-feature)并在那里提交.当它再次变得稳定时,您可以执行git reset --soft my-feature,checkout my-featurecommit在几个未完成的提交中在您的分支中创建单个提交.之后,可以删除临时分支.

  • 我有资格使用"不要使用修改"选项:不要在已发表的作品中使用它.在未发表的作品(本地/个人分支)上,你绝对应该使用它.(如果你有一个以上的个人回购,这意味着你会使用`push -force`来转移你的工作.这没关系.) (6认同)